@crystaldesign/basket-handler 26.7.0-beta.2 → 26.7.0-beta.21
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/build/cjs/index.js +422 -88
- package/build/esm/index.js +422 -88
- package/build/types/basket-handler/src/index.d.ts +13 -0
- package/build/types/basket-handler/src/index.d.ts.map +1 -1
- package/build/types/basket-handler/src/types.d.ts +43 -1
- package/build/types/basket-handler/src/types.d.ts.map +1 -1
- package/package.json +2 -2
package/build/esm/index.js
CHANGED
|
@@ -20,6 +20,9 @@ import DivaUtils from '@crystaldesign/diva-utils';
|
|
|
20
20
|
|
|
21
21
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
22
22
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
23
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
24
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
25
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
23
26
|
var BASKET_SAVE_ERROR = /*#__PURE__*/function (BASKET_SAVE_ERROR) {
|
|
24
27
|
BASKET_SAVE_ERROR["ERROR_NO_BASKET_SAVED"] = "ERROR_NO_BASKET_SAVED";
|
|
25
28
|
BASKET_SAVE_ERROR["ERROR_BASKET_AFTER_SAVE"] = "ERROR_BASKET_AFTER_SAVE";
|
|
@@ -46,87 +49,418 @@ var BasketHandler = /*#__PURE__*/function () {
|
|
|
46
49
|
return this._api2Url;
|
|
47
50
|
}
|
|
48
51
|
}, {
|
|
49
|
-
key: "
|
|
52
|
+
key: "getAuthHeader",
|
|
53
|
+
value: function getAuthHeader(jwt, apiKey) {
|
|
54
|
+
if (jwt) return {
|
|
55
|
+
Authorization: 'Bearer ' + jwt
|
|
56
|
+
};
|
|
57
|
+
if (apiKey) return {
|
|
58
|
+
'X-API-KEY': apiKey
|
|
59
|
+
};
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
}, {
|
|
63
|
+
key: "getUploadTupleKey",
|
|
64
|
+
value: function getUploadTupleKey(upload) {
|
|
65
|
+
var _upload$setImagesId, _upload$variantId;
|
|
66
|
+
return "".concat(upload.slot, "|").concat(upload.setId, "|").concat((_upload$setImagesId = upload.setImagesId) !== null && _upload$setImagesId !== void 0 ? _upload$setImagesId : '', "|").concat((_upload$variantId = upload.variantId) !== null && _upload$variantId !== void 0 ? _upload$variantId : '');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Mirror the CDN URLs the backend wrote into the saved basket back onto the
|
|
71
|
+
* in-memory basket the UI still holds. Without this, after save the local
|
|
72
|
+
* Set2DImage / SetImages[].URL stay empty (they were sent empty) and the
|
|
73
|
+
* transient preview URLs get cleared, so 2D/AI images disappear from the
|
|
74
|
+
* checkout. Mirrors the backend resolveUploadTarget routing, incl. variants.
|
|
75
|
+
*/
|
|
76
|
+
}, {
|
|
77
|
+
key: "syncUploadedUrlsToLocalBasket",
|
|
78
|
+
value: function syncUploadedUrlsToLocalBasket(localBasket, savedBasketJson, uploadRefs) {
|
|
79
|
+
var _savedBasketJson$Orde;
|
|
80
|
+
if (!(savedBasketJson !== null && savedBasketJson !== void 0 && (_savedBasketJson$Orde = savedBasketJson.OrderSets) !== null && _savedBasketJson$Orde !== void 0 && _savedBasketJson$Orde.length) || !uploadRefs.length) return;
|
|
81
|
+
var _iterator = _createForOfIteratorHelper(uploadRefs),
|
|
82
|
+
_step;
|
|
83
|
+
try {
|
|
84
|
+
var _loop = function _loop() {
|
|
85
|
+
var _localBasket$OrderSet, _savedBasketJson$Orde2, _localSet$SetImages, _savedSet$SetImages;
|
|
86
|
+
var uploadRef = _step.value;
|
|
87
|
+
var localSet = (_localBasket$OrderSet = localBasket.OrderSets) === null || _localBasket$OrderSet === void 0 ? void 0 : _localBasket$OrderSet.find(function (orderSet) {
|
|
88
|
+
return orderSet.SetID === uploadRef.setId;
|
|
89
|
+
});
|
|
90
|
+
var savedSet = (_savedBasketJson$Orde2 = savedBasketJson.OrderSets) === null || _savedBasketJson$Orde2 === void 0 ? void 0 : _savedBasketJson$Orde2.find(function (orderSet) {
|
|
91
|
+
return orderSet.SetID === uploadRef.setId;
|
|
92
|
+
});
|
|
93
|
+
if (!localSet || !savedSet) return 0; // continue
|
|
94
|
+
if (uploadRef.slot === 'planning2D') {
|
|
95
|
+
if (uploadRef.variantId !== undefined) {
|
|
96
|
+
var _localSet$ConfigVaria, _savedSet$ConfigVaria;
|
|
97
|
+
var localVariant = (_localSet$ConfigVaria = localSet.ConfigVariants) === null || _localSet$ConfigVaria === void 0 ? void 0 : _localSet$ConfigVaria.find(function (variant) {
|
|
98
|
+
return variant.VariantID === uploadRef.variantId;
|
|
99
|
+
});
|
|
100
|
+
var savedVariant = (_savedSet$ConfigVaria = savedSet.ConfigVariants) === null || _savedSet$ConfigVaria === void 0 ? void 0 : _savedSet$ConfigVaria.find(function (variant) {
|
|
101
|
+
return variant.VariantID === uploadRef.variantId;
|
|
102
|
+
});
|
|
103
|
+
if (localVariant && savedVariant !== null && savedVariant !== void 0 && savedVariant.Set2DImage) {
|
|
104
|
+
localVariant.Set2DImage = savedVariant.Set2DImage;
|
|
105
|
+
}
|
|
106
|
+
return 0; // continue
|
|
107
|
+
}
|
|
108
|
+
if (savedSet.Set2DImage) {
|
|
109
|
+
localSet.Set2DImage = savedSet.Set2DImage;
|
|
110
|
+
}
|
|
111
|
+
return 0; // continue
|
|
112
|
+
}
|
|
113
|
+
var localImage = (_localSet$SetImages = localSet.SetImages) === null || _localSet$SetImages === void 0 ? void 0 : _localSet$SetImages.find(function (setImage) {
|
|
114
|
+
return setImage.Id === uploadRef.setImagesId;
|
|
115
|
+
});
|
|
116
|
+
var savedImage = (_savedSet$SetImages = savedSet.SetImages) === null || _savedSet$SetImages === void 0 ? void 0 : _savedSet$SetImages.find(function (setImage) {
|
|
117
|
+
return setImage.Id === uploadRef.setImagesId;
|
|
118
|
+
});
|
|
119
|
+
if (localImage && savedImage !== null && savedImage !== void 0 && savedImage.URL) {
|
|
120
|
+
localImage.URL = savedImage.URL;
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
_ret;
|
|
124
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
125
|
+
_ret = _loop();
|
|
126
|
+
if (_ret === 0) continue;
|
|
127
|
+
}
|
|
128
|
+
} catch (err) {
|
|
129
|
+
_iterator.e(err);
|
|
130
|
+
} finally {
|
|
131
|
+
_iterator.f();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}, {
|
|
135
|
+
key: "validateAndFilterPendingUploads",
|
|
136
|
+
value: function validateAndFilterPendingUploads(basket) {
|
|
137
|
+
var _basket$OrderSets, _basket$OrderSets2;
|
|
138
|
+
var pendingUploads = basket.listPendingUploads();
|
|
139
|
+
var knownSetIds = new Set(((_basket$OrderSets = basket.OrderSets) !== null && _basket$OrderSets !== void 0 ? _basket$OrderSets : []).map(function (orderSet) {
|
|
140
|
+
return orderSet.SetID;
|
|
141
|
+
}));
|
|
142
|
+
var validSetImagesIdsBySet = new Map();
|
|
143
|
+
var validVariantIdsBySet = new Map();
|
|
144
|
+
var _iterator2 = _createForOfIteratorHelper((_basket$OrderSets2 = basket.OrderSets) !== null && _basket$OrderSets2 !== void 0 ? _basket$OrderSets2 : []),
|
|
145
|
+
_step2;
|
|
146
|
+
try {
|
|
147
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
148
|
+
var _orderSet$SetImages, _orderSet$ConfigVaria;
|
|
149
|
+
var orderSet = _step2.value;
|
|
150
|
+
validSetImagesIdsBySet.set(orderSet.SetID, new Set(((_orderSet$SetImages = orderSet.SetImages) !== null && _orderSet$SetImages !== void 0 ? _orderSet$SetImages : []).map(function (setImage) {
|
|
151
|
+
return setImage === null || setImage === void 0 ? void 0 : setImage.Id;
|
|
152
|
+
}).filter(function (id) {
|
|
153
|
+
return !!id;
|
|
154
|
+
})));
|
|
155
|
+
validVariantIdsBySet.set(orderSet.SetID, new Set(((_orderSet$ConfigVaria = orderSet.ConfigVariants) !== null && _orderSet$ConfigVaria !== void 0 ? _orderSet$ConfigVaria : []).map(function (variant) {
|
|
156
|
+
return variant === null || variant === void 0 ? void 0 : variant.VariantID;
|
|
157
|
+
}).filter(function (id) {
|
|
158
|
+
return id !== undefined && id !== null;
|
|
159
|
+
})));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// planning2D is unique per (setId, variantId): the main configuration and
|
|
163
|
+
// each ConfigVariant of a set may carry its own 2D image.
|
|
164
|
+
} catch (err) {
|
|
165
|
+
_iterator2.e(err);
|
|
166
|
+
} finally {
|
|
167
|
+
_iterator2.f();
|
|
168
|
+
}
|
|
169
|
+
var planning2DTargets = new Set();
|
|
170
|
+
var seenTuples = new Set();
|
|
171
|
+
var filteredUploads = [];
|
|
172
|
+
var _iterator3 = _createForOfIteratorHelper(pendingUploads),
|
|
173
|
+
_step3;
|
|
174
|
+
try {
|
|
175
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
176
|
+
var pendingUpload = _step3.value;
|
|
177
|
+
if (pendingUpload.slot === 'planning2D') {
|
|
178
|
+
var _validVariantIdsBySet, _pendingUpload$varian;
|
|
179
|
+
if (!knownSetIds.has(pendingUpload.setId)) {
|
|
180
|
+
throw new Error('planning2D pending upload setId does not exist in basket OrderSets');
|
|
181
|
+
}
|
|
182
|
+
if (pendingUpload.variantId !== undefined && !((_validVariantIdsBySet = validVariantIdsBySet.get(pendingUpload.setId)) !== null && _validVariantIdsBySet !== void 0 && _validVariantIdsBySet.has(pendingUpload.variantId))) {
|
|
183
|
+
throw new Error('planning2D pending upload variantId does not exist in matching OrderSet.ConfigVariants');
|
|
184
|
+
}
|
|
185
|
+
var planning2DTargetKey = "".concat(pendingUpload.setId, "|").concat((_pendingUpload$varian = pendingUpload.variantId) !== null && _pendingUpload$varian !== void 0 ? _pendingUpload$varian : '');
|
|
186
|
+
if (planning2DTargets.has(planning2DTargetKey)) {
|
|
187
|
+
throw new Error('Only one planning2D pending upload is allowed per setId/variantId');
|
|
188
|
+
}
|
|
189
|
+
planning2DTargets.add(planning2DTargetKey);
|
|
190
|
+
}
|
|
191
|
+
if (pendingUpload.slot === 'aiImage') {
|
|
192
|
+
if (!pendingUpload.setImagesId) {
|
|
193
|
+
var _this$LOG;
|
|
194
|
+
(_this$LOG = this.LOG) === null || _this$LOG === void 0 || _this$LOG.warn('Skipping aiImage pending upload without setImagesId');
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
var setImagesIds = validSetImagesIdsBySet.get(pendingUpload.setId);
|
|
198
|
+
if (!(setImagesIds !== null && setImagesIds !== void 0 && setImagesIds.has(pendingUpload.setImagesId))) {
|
|
199
|
+
throw new Error('aiImage pending upload setImagesId does not exist in matching OrderSet.SetImages');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
var tupleKey = this.getUploadTupleKey(pendingUpload);
|
|
203
|
+
if (seenTuples.has(tupleKey)) {
|
|
204
|
+
throw new Error('Duplicate pending upload tuple detected');
|
|
205
|
+
}
|
|
206
|
+
seenTuples.add(tupleKey);
|
|
207
|
+
filteredUploads.push(pendingUpload);
|
|
208
|
+
}
|
|
209
|
+
} catch (err) {
|
|
210
|
+
_iterator3.e(err);
|
|
211
|
+
} finally {
|
|
212
|
+
_iterator3.f();
|
|
213
|
+
}
|
|
214
|
+
return filteredUploads;
|
|
215
|
+
}
|
|
216
|
+
}, {
|
|
217
|
+
key: "initUploads",
|
|
50
218
|
value: function () {
|
|
51
|
-
var
|
|
52
|
-
var
|
|
219
|
+
var _initUploads = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
|
|
220
|
+
var _DivaUtils$Configurat, _initResponse$data$ti, _initResponse$data;
|
|
221
|
+
var jwt, apiKey, basket, pendingUploads, authHeader, initUrl, initItems, initResponse;
|
|
53
222
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
54
223
|
while (1) switch (_context.prev = _context.next) {
|
|
55
224
|
case 0:
|
|
56
|
-
jwt = _ref.jwt,
|
|
225
|
+
jwt = _ref.jwt, apiKey = _ref.apiKey, basket = _ref.basket, pendingUploads = _ref.pendingUploads;
|
|
226
|
+
authHeader = this.getAuthHeader(jwt, apiKey);
|
|
227
|
+
initUrl = this.basketService + '/v1/baskets/save/uploads/init';
|
|
228
|
+
initItems = pendingUploads.map(function (pendingUpload) {
|
|
229
|
+
return {
|
|
230
|
+
slot: pendingUpload.slot,
|
|
231
|
+
setId: pendingUpload.setId,
|
|
232
|
+
setImagesId: pendingUpload.setImagesId,
|
|
233
|
+
variantId: pendingUpload.variantId,
|
|
234
|
+
fileName: pendingUpload.fileName,
|
|
235
|
+
mimeType: pendingUpload.mimeType,
|
|
236
|
+
size: pendingUpload.size
|
|
237
|
+
};
|
|
238
|
+
});
|
|
239
|
+
_context.next = 6;
|
|
240
|
+
return axios.post(initUrl, JSON.stringify({
|
|
241
|
+
organizationId: basket.OrganizationId,
|
|
242
|
+
uploads: initItems
|
|
243
|
+
}), {
|
|
244
|
+
headers: _objectSpread(_objectSpread({}, authHeader), {}, {
|
|
245
|
+
'Content-Type': 'application/json',
|
|
246
|
+
'X-Session-Id': DivaUtils.SessionId,
|
|
247
|
+
'X-Configurator-Id': (_DivaUtils$Configurat = DivaUtils.ConfigurationId) !== null && _DivaUtils$Configurat !== void 0 ? _DivaUtils$Configurat : ''
|
|
248
|
+
})
|
|
249
|
+
});
|
|
250
|
+
case 6:
|
|
251
|
+
initResponse = _context.sent;
|
|
252
|
+
return _context.abrupt("return", (_initResponse$data$ti = (_initResponse$data = initResponse.data) === null || _initResponse$data === void 0 ? void 0 : _initResponse$data.tickets) !== null && _initResponse$data$ti !== void 0 ? _initResponse$data$ti : []);
|
|
253
|
+
case 8:
|
|
254
|
+
case "end":
|
|
255
|
+
return _context.stop();
|
|
256
|
+
}
|
|
257
|
+
}, _callee, this);
|
|
258
|
+
}));
|
|
259
|
+
function initUploads(_x) {
|
|
260
|
+
return _initUploads.apply(this, arguments);
|
|
261
|
+
}
|
|
262
|
+
return initUploads;
|
|
263
|
+
}()
|
|
264
|
+
}, {
|
|
265
|
+
key: "uploadPendingFiles",
|
|
266
|
+
value: function () {
|
|
267
|
+
var _uploadPendingFiles = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(pendingUploads, tickets) {
|
|
268
|
+
var uploadTicketsByTuple, _iterator4, _step4, ticket, uploadRefs, _iterator5, _step5, _ticket$simpleUpload, _ticket$simpleUpload2, _ticket$simpleUpload$, pendingUpload, _ticket, uploadResponse;
|
|
269
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
270
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
271
|
+
case 0:
|
|
272
|
+
uploadTicketsByTuple = new Map();
|
|
273
|
+
_iterator4 = _createForOfIteratorHelper(tickets);
|
|
274
|
+
try {
|
|
275
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
276
|
+
ticket = _step4.value;
|
|
277
|
+
uploadTicketsByTuple.set(this.getUploadTupleKey(ticket), ticket);
|
|
278
|
+
}
|
|
279
|
+
} catch (err) {
|
|
280
|
+
_iterator4.e(err);
|
|
281
|
+
} finally {
|
|
282
|
+
_iterator4.f();
|
|
283
|
+
}
|
|
284
|
+
uploadRefs = [];
|
|
285
|
+
_iterator5 = _createForOfIteratorHelper(pendingUploads);
|
|
286
|
+
_context2.prev = 5;
|
|
287
|
+
_iterator5.s();
|
|
288
|
+
case 7:
|
|
289
|
+
if ((_step5 = _iterator5.n()).done) {
|
|
290
|
+
_context2.next = 20;
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
pendingUpload = _step5.value;
|
|
294
|
+
_ticket = uploadTicketsByTuple.get(this.getUploadTupleKey(pendingUpload));
|
|
295
|
+
if (!(!(_ticket !== null && _ticket !== void 0 && _ticket.uploadId) || !((_ticket$simpleUpload = _ticket.simpleUpload) !== null && _ticket$simpleUpload !== void 0 && _ticket$simpleUpload.url) || !((_ticket$simpleUpload2 = _ticket.simpleUpload) !== null && _ticket$simpleUpload2 !== void 0 && _ticket$simpleUpload2.method))) {
|
|
296
|
+
_context2.next = 12;
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
throw new Error('Missing upload ticket for pending basket upload');
|
|
300
|
+
case 12:
|
|
301
|
+
_context2.next = 14;
|
|
302
|
+
return fetch(_ticket.simpleUpload.url, {
|
|
303
|
+
method: _ticket.simpleUpload.method,
|
|
304
|
+
headers: (_ticket$simpleUpload$ = _ticket.simpleUpload.headers) !== null && _ticket$simpleUpload$ !== void 0 ? _ticket$simpleUpload$ : {},
|
|
305
|
+
body: pendingUpload.blob
|
|
306
|
+
});
|
|
307
|
+
case 14:
|
|
308
|
+
uploadResponse = _context2.sent;
|
|
309
|
+
if (uploadResponse.ok) {
|
|
310
|
+
_context2.next = 17;
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
throw new Error('Direct storage upload failed');
|
|
314
|
+
case 17:
|
|
315
|
+
uploadRefs.push({
|
|
316
|
+
slot: pendingUpload.slot,
|
|
317
|
+
setId: pendingUpload.setId,
|
|
318
|
+
setImagesId: pendingUpload.setImagesId,
|
|
319
|
+
variantId: pendingUpload.variantId,
|
|
320
|
+
fileName: pendingUpload.fileName,
|
|
321
|
+
uploadId: _ticket.uploadId
|
|
322
|
+
});
|
|
323
|
+
case 18:
|
|
324
|
+
_context2.next = 7;
|
|
325
|
+
break;
|
|
326
|
+
case 20:
|
|
327
|
+
_context2.next = 25;
|
|
328
|
+
break;
|
|
329
|
+
case 22:
|
|
330
|
+
_context2.prev = 22;
|
|
331
|
+
_context2.t0 = _context2["catch"](5);
|
|
332
|
+
_iterator5.e(_context2.t0);
|
|
333
|
+
case 25:
|
|
334
|
+
_context2.prev = 25;
|
|
335
|
+
_iterator5.f();
|
|
336
|
+
return _context2.finish(25);
|
|
337
|
+
case 28:
|
|
338
|
+
return _context2.abrupt("return", uploadRefs);
|
|
339
|
+
case 29:
|
|
340
|
+
case "end":
|
|
341
|
+
return _context2.stop();
|
|
342
|
+
}
|
|
343
|
+
}, _callee2, this, [[5, 22, 25, 28]]);
|
|
344
|
+
}));
|
|
345
|
+
function uploadPendingFiles(_x2, _x3) {
|
|
346
|
+
return _uploadPendingFiles.apply(this, arguments);
|
|
347
|
+
}
|
|
348
|
+
return uploadPendingFiles;
|
|
349
|
+
}()
|
|
350
|
+
}, {
|
|
351
|
+
key: "saveBasket",
|
|
352
|
+
value: function () {
|
|
353
|
+
var _saveBasket = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref2) {
|
|
354
|
+
var jwt, basket, awaitPDF, utmCampaign, saveToApi2, sessionGuid, apiKey, _this$LOG2, fullUrl, response, _DivaUtils$Configurat2, authHeader, pendingUploads, uploadRefs, uploadTickets, saveRequestBody, resultBasket, api2Result, _e$response, _e$response2, _this$LOG5, _this$LOG3, _this$LOG4;
|
|
355
|
+
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
356
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
357
|
+
case 0:
|
|
358
|
+
jwt = _ref2.jwt, basket = _ref2.basket, awaitPDF = _ref2.awaitPDF, utmCampaign = _ref2.utmCampaign, saveToApi2 = _ref2.saveToApi2, sessionGuid = _ref2.sessionGuid, apiKey = _ref2.apiKey;
|
|
57
359
|
if (basket.DivaNr) {
|
|
58
|
-
|
|
360
|
+
_context3.next = 4;
|
|
59
361
|
break;
|
|
60
362
|
}
|
|
61
|
-
(_this$
|
|
62
|
-
return
|
|
363
|
+
(_this$LOG2 = this.LOG) === null || _this$LOG2 === void 0 || _this$LOG2.error('Saving Basket Failed. Error: DivaNr is empty', 'SELLER_0003');
|
|
364
|
+
return _context3.abrupt("return", BASKET_SAVE_ERROR.ERROR_NO_BASKET_SAVED);
|
|
63
365
|
case 4:
|
|
64
|
-
fullUrl = new URL(this.basketService + '/baskets');
|
|
366
|
+
fullUrl = new URL(this.basketService + '/v1/baskets/save');
|
|
65
367
|
if (awaitPDF != undefined) fullUrl.searchParams.append('awaitPDF', awaitPDF.toString());
|
|
66
368
|
if (utmCampaign) fullUrl.searchParams.append('utmCampaign', utmCampaign);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
369
|
+
_context3.prev = 7;
|
|
370
|
+
authHeader = this.getAuthHeader(jwt, apiKey);
|
|
371
|
+
pendingUploads = this.validateAndFilterPendingUploads(basket);
|
|
372
|
+
uploadRefs = [];
|
|
373
|
+
if (!(pendingUploads.length > 0)) {
|
|
374
|
+
_context3.next = 18;
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
_context3.next = 14;
|
|
378
|
+
return this.initUploads({
|
|
379
|
+
jwt: jwt,
|
|
380
|
+
apiKey: apiKey,
|
|
381
|
+
basket: basket,
|
|
382
|
+
pendingUploads: pendingUploads
|
|
383
|
+
});
|
|
384
|
+
case 14:
|
|
385
|
+
uploadTickets = _context3.sent;
|
|
386
|
+
_context3.next = 17;
|
|
387
|
+
return this.uploadPendingFiles(pendingUploads, uploadTickets);
|
|
388
|
+
case 17:
|
|
389
|
+
uploadRefs = _context3.sent;
|
|
390
|
+
case 18:
|
|
391
|
+
saveRequestBody = {
|
|
392
|
+
basket: basket.getAsJson()
|
|
72
393
|
};
|
|
73
|
-
|
|
74
|
-
|
|
394
|
+
if (uploadRefs.length > 0) {
|
|
395
|
+
saveRequestBody.uploads = uploadRefs;
|
|
396
|
+
}
|
|
397
|
+
_context3.next = 22;
|
|
398
|
+
return axios.post(fullUrl.toString(), JSON.stringify(saveRequestBody), {
|
|
75
399
|
headers: _objectSpread(_objectSpread({}, authHeader), {}, {
|
|
76
400
|
'Content-Type': 'application/json',
|
|
77
401
|
'X-Session-Id': DivaUtils.SessionId,
|
|
78
|
-
'X-Configurator-Id': (_DivaUtils$
|
|
402
|
+
'X-Configurator-Id': (_DivaUtils$Configurat2 = DivaUtils.ConfigurationId) !== null && _DivaUtils$Configurat2 !== void 0 ? _DivaUtils$Configurat2 : ''
|
|
79
403
|
})
|
|
80
404
|
});
|
|
81
|
-
case
|
|
82
|
-
response =
|
|
83
|
-
|
|
405
|
+
case 22:
|
|
406
|
+
response = _context3.sent;
|
|
407
|
+
_context3.next = 25;
|
|
84
408
|
return response.data;
|
|
85
|
-
case
|
|
86
|
-
resultBasket =
|
|
409
|
+
case 25:
|
|
410
|
+
resultBasket = _context3.sent;
|
|
411
|
+
if (uploadRefs.length > 0) {
|
|
412
|
+
this.syncUploadedUrlsToLocalBasket(basket, resultBasket, uploadRefs);
|
|
413
|
+
}
|
|
87
414
|
if (!saveToApi2) {
|
|
88
|
-
|
|
415
|
+
_context3.next = 34;
|
|
89
416
|
break;
|
|
90
417
|
}
|
|
91
|
-
|
|
418
|
+
_context3.next = 30;
|
|
92
419
|
return this.api2SaveBasket({
|
|
93
|
-
basket:
|
|
420
|
+
basket: resultBasket,
|
|
94
421
|
sessionGuid: sessionGuid,
|
|
95
422
|
awaitPDF: awaitPDF,
|
|
96
423
|
jwt: jwt,
|
|
97
424
|
saveToApi2: saveToApi2,
|
|
98
425
|
_id: resultBasket._id
|
|
99
426
|
});
|
|
100
|
-
case
|
|
101
|
-
api2Result =
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
case 22:
|
|
105
|
-
_context.prev = 22;
|
|
106
|
-
_context.t0 = _context["catch"](7);
|
|
107
|
-
if (!(((_e$response = _context.t0.response) === null || _e$response === void 0 ? void 0 : _e$response.status) === 409)) {
|
|
108
|
-
_context.next = 29;
|
|
427
|
+
case 30:
|
|
428
|
+
api2Result = _context3.sent;
|
|
429
|
+
if (!api2Result) {
|
|
430
|
+
_context3.next = 34;
|
|
109
431
|
break;
|
|
110
432
|
}
|
|
111
|
-
|
|
112
|
-
return
|
|
113
|
-
case
|
|
114
|
-
|
|
115
|
-
|
|
433
|
+
basket.clearPendingUploads();
|
|
434
|
+
return _context3.abrupt("return", api2Result);
|
|
435
|
+
case 34:
|
|
436
|
+
basket.clearPendingUploads();
|
|
437
|
+
return _context3.abrupt("return", resultBasket);
|
|
438
|
+
case 38:
|
|
439
|
+
_context3.prev = 38;
|
|
440
|
+
_context3.t0 = _context3["catch"](7);
|
|
441
|
+
if (!(((_e$response = _context3.t0.response) === null || _e$response === void 0 ? void 0 : _e$response.status) === 409)) {
|
|
442
|
+
_context3.next = 45;
|
|
116
443
|
break;
|
|
117
444
|
}
|
|
118
|
-
(_this$LOG3 = this.LOG) === null || _this$LOG3 === void 0 || _this$LOG3.error('Saving Basket failed.');
|
|
119
|
-
return
|
|
120
|
-
case
|
|
121
|
-
(
|
|
122
|
-
|
|
123
|
-
|
|
445
|
+
(_this$LOG3 = this.LOG) === null || _this$LOG3 === void 0 || _this$LOG3.error('Saving Basket failed - Entity already exists.');
|
|
446
|
+
return _context3.abrupt("return", BASKET_SAVE_ERROR.ERROR_NO_BASKET_SAVED_ENTITY_EXISTS);
|
|
447
|
+
case 45:
|
|
448
|
+
if (!(((_e$response2 = _context3.t0.response) === null || _e$response2 === void 0 ? void 0 : _e$response2.status) !== 201)) {
|
|
449
|
+
_context3.next = 48;
|
|
450
|
+
break;
|
|
451
|
+
}
|
|
452
|
+
(_this$LOG4 = this.LOG) === null || _this$LOG4 === void 0 || _this$LOG4.error('Saving Basket failed.');
|
|
453
|
+
return _context3.abrupt("return", BASKET_SAVE_ERROR.ERROR_NO_BASKET_SAVED);
|
|
454
|
+
case 48:
|
|
455
|
+
(_this$LOG5 = this.LOG) === null || _this$LOG5 === void 0 || _this$LOG5.error('Saving Basket Failed. serverError ' + _context3.t0.message, 'SELLER_0003');
|
|
456
|
+
return _context3.abrupt("return", BASKET_SAVE_ERROR.ERROR_NO_BASKET_SAVED);
|
|
457
|
+
case 50:
|
|
124
458
|
case "end":
|
|
125
|
-
return
|
|
459
|
+
return _context3.stop();
|
|
126
460
|
}
|
|
127
|
-
},
|
|
461
|
+
}, _callee3, this, [[7, 38]]);
|
|
128
462
|
}));
|
|
129
|
-
function saveBasket(
|
|
463
|
+
function saveBasket(_x4) {
|
|
130
464
|
return _saveBasket.apply(this, arguments);
|
|
131
465
|
}
|
|
132
466
|
return saveBasket;
|
|
@@ -134,29 +468,29 @@ var BasketHandler = /*#__PURE__*/function () {
|
|
|
134
468
|
}, {
|
|
135
469
|
key: "api2SaveBasket",
|
|
136
470
|
value: function () {
|
|
137
|
-
var _api2SaveBasket = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function
|
|
138
|
-
var basket, sessionGuid, awaitPDF, _id, _this$
|
|
139
|
-
return _regeneratorRuntime.wrap(function
|
|
140
|
-
while (1) switch (
|
|
471
|
+
var _api2SaveBasket = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref3) {
|
|
472
|
+
var basket, sessionGuid, awaitPDF, _id, _this$LOG6, _this$LOG7, fullUrl, response, _DivaUtils$Configurat3, _response$Result, _this$LOG8, _this$LOG9;
|
|
473
|
+
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
474
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
141
475
|
case 0:
|
|
142
|
-
basket =
|
|
476
|
+
basket = _ref3.basket, sessionGuid = _ref3.sessionGuid, awaitPDF = _ref3.awaitPDF, _id = _ref3._id;
|
|
143
477
|
if (basket.getAsJson().DivaNr) {
|
|
144
|
-
|
|
478
|
+
_context4.next = 4;
|
|
145
479
|
break;
|
|
146
480
|
}
|
|
147
|
-
(_this$
|
|
148
|
-
return
|
|
481
|
+
(_this$LOG6 = this.LOG) === null || _this$LOG6 === void 0 || _this$LOG6.error('Saving Basket Failed. Error: DivaNr is empty', 'SELLER_0003');
|
|
482
|
+
return _context4.abrupt("return", BASKET_SAVE_ERROR.ERROR_BASKET_AFTER_SAVE);
|
|
149
483
|
case 4:
|
|
150
484
|
if (sessionGuid) {
|
|
151
|
-
|
|
485
|
+
_context4.next = 7;
|
|
152
486
|
break;
|
|
153
487
|
}
|
|
154
|
-
(_this$
|
|
155
|
-
return
|
|
488
|
+
(_this$LOG7 = this.LOG) === null || _this$LOG7 === void 0 || _this$LOG7.error('Cant create api2 Basket without sessionguid');
|
|
489
|
+
return _context4.abrupt("return", BASKET_SAVE_ERROR.ERROR_BASKET_AFTER_SAVE);
|
|
156
490
|
case 7:
|
|
157
491
|
fullUrl = this.api2Url + '?function=SetJsonBasketData3' + '&callHeadlessBrowserAsync=' + (!awaitPDF ? '1' : '0');
|
|
158
|
-
|
|
159
|
-
|
|
492
|
+
_context4.prev = 8;
|
|
493
|
+
_context4.next = 11;
|
|
160
494
|
return axios.post(fullUrl, JSON.stringify(_objectSpread(_objectSpread({}, basket), {}, {
|
|
161
495
|
_id: _id
|
|
162
496
|
})), {
|
|
@@ -164,7 +498,7 @@ var BasketHandler = /*#__PURE__*/function () {
|
|
|
164
498
|
sessionGuid: sessionGuid,
|
|
165
499
|
'Content-Type': 'application/json',
|
|
166
500
|
'X-Session-Id': DivaUtils.SessionId,
|
|
167
|
-
'X-Configurator-Id': (_DivaUtils$
|
|
501
|
+
'X-Configurator-Id': (_DivaUtils$Configurat3 = DivaUtils.ConfigurationId) !== null && _DivaUtils$Configurat3 !== void 0 ? _DivaUtils$Configurat3 : ''
|
|
168
502
|
}
|
|
169
503
|
}).then(function (res) {
|
|
170
504
|
if (res.status !== 200) {
|
|
@@ -173,30 +507,30 @@ var BasketHandler = /*#__PURE__*/function () {
|
|
|
173
507
|
return res.data;
|
|
174
508
|
});
|
|
175
509
|
case 11:
|
|
176
|
-
response =
|
|
510
|
+
response = _context4.sent;
|
|
177
511
|
if (!(response.Error || (_response$Result = response.Result) !== null && _response$Result !== void 0 && _response$Result.startsWith('Error'))) {
|
|
178
|
-
|
|
512
|
+
_context4.next = 15;
|
|
179
513
|
break;
|
|
180
514
|
}
|
|
181
|
-
(_this$
|
|
182
|
-
return
|
|
515
|
+
(_this$LOG8 = this.LOG) === null || _this$LOG8 === void 0 || _this$LOG8.error('Saving Basket Failed. serverError: ' + response.Error, 'SELLER_0003');
|
|
516
|
+
return _context4.abrupt("return", BASKET_SAVE_ERROR.ERROR_BASKET_AFTER_SAVE);
|
|
183
517
|
case 15:
|
|
184
|
-
|
|
518
|
+
_context4.next = 21;
|
|
185
519
|
break;
|
|
186
520
|
case 17:
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
(_this$
|
|
190
|
-
return
|
|
521
|
+
_context4.prev = 17;
|
|
522
|
+
_context4.t0 = _context4["catch"](8);
|
|
523
|
+
(_this$LOG9 = this.LOG) === null || _this$LOG9 === void 0 || _this$LOG9.error('Saving Basket Failed. serverError ' + _context4.t0.message, 'SELLER_0003');
|
|
524
|
+
return _context4.abrupt("return", BASKET_SAVE_ERROR.ERROR_BASKET_AFTER_SAVE);
|
|
191
525
|
case 21:
|
|
192
|
-
return
|
|
526
|
+
return _context4.abrupt("return", undefined);
|
|
193
527
|
case 22:
|
|
194
528
|
case "end":
|
|
195
|
-
return
|
|
529
|
+
return _context4.stop();
|
|
196
530
|
}
|
|
197
|
-
},
|
|
531
|
+
}, _callee4, this, [[8, 17]]);
|
|
198
532
|
}));
|
|
199
|
-
function api2SaveBasket(
|
|
533
|
+
function api2SaveBasket(_x5) {
|
|
200
534
|
return _api2SaveBasket.apply(this, arguments);
|
|
201
535
|
}
|
|
202
536
|
return api2SaveBasket;
|
|
@@ -204,18 +538,18 @@ var BasketHandler = /*#__PURE__*/function () {
|
|
|
204
538
|
}, {
|
|
205
539
|
key: "setOrdered",
|
|
206
540
|
value: function () {
|
|
207
|
-
var _setOrdered = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function
|
|
208
|
-
var serviceUrl, organizationId, jwt, divaNr, documentVersion, body, _this$
|
|
209
|
-
return _regeneratorRuntime.wrap(function
|
|
210
|
-
while (1) switch (
|
|
541
|
+
var _setOrdered = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(_ref4) {
|
|
542
|
+
var serviceUrl, organizationId, jwt, divaNr, documentVersion, body, _this$LOG10;
|
|
543
|
+
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
544
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
211
545
|
case 0:
|
|
212
|
-
serviceUrl =
|
|
213
|
-
|
|
546
|
+
serviceUrl = _ref4.serviceUrl, organizationId = _ref4.organizationId, jwt = _ref4.jwt, divaNr = _ref4.divaNr, documentVersion = _ref4.documentVersion;
|
|
547
|
+
_context5.prev = 1;
|
|
214
548
|
body = {
|
|
215
549
|
divaNr: divaNr,
|
|
216
550
|
version: documentVersion
|
|
217
551
|
};
|
|
218
|
-
|
|
552
|
+
_context5.next = 5;
|
|
219
553
|
return fetch("".concat(serviceUrl, "/orders?organizationId=").concat(organizationId), {
|
|
220
554
|
method: 'POST',
|
|
221
555
|
headers: {
|
|
@@ -227,20 +561,20 @@ var BasketHandler = /*#__PURE__*/function () {
|
|
|
227
561
|
return r.json();
|
|
228
562
|
});
|
|
229
563
|
case 5:
|
|
230
|
-
|
|
564
|
+
_context5.next = 11;
|
|
231
565
|
break;
|
|
232
566
|
case 7:
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
(_this$
|
|
567
|
+
_context5.prev = 7;
|
|
568
|
+
_context5.t0 = _context5["catch"](1);
|
|
569
|
+
(_this$LOG10 = this.LOG) === null || _this$LOG10 === void 0 || _this$LOG10.error('Could not set OrderStatus: ' + _context5.t0.message);
|
|
236
570
|
throw new Error('DivaNr not found');
|
|
237
571
|
case 11:
|
|
238
572
|
case "end":
|
|
239
|
-
return
|
|
573
|
+
return _context5.stop();
|
|
240
574
|
}
|
|
241
|
-
},
|
|
575
|
+
}, _callee5, this, [[1, 7]]);
|
|
242
576
|
}));
|
|
243
|
-
function setOrdered(
|
|
577
|
+
function setOrdered(_x6) {
|
|
244
578
|
return _setOrdered.apply(this, arguments);
|
|
245
579
|
}
|
|
246
580
|
return setOrdered;
|
|
@@ -13,6 +13,19 @@ export default class BasketHandler {
|
|
|
13
13
|
constructor(LOG: any, basketService: string, api2Url: string);
|
|
14
14
|
get basketService(): string;
|
|
15
15
|
get api2Url(): string;
|
|
16
|
+
private getAuthHeader;
|
|
17
|
+
private getUploadTupleKey;
|
|
18
|
+
/**
|
|
19
|
+
* Mirror the CDN URLs the backend wrote into the saved basket back onto the
|
|
20
|
+
* in-memory basket the UI still holds. Without this, after save the local
|
|
21
|
+
* Set2DImage / SetImages[].URL stay empty (they were sent empty) and the
|
|
22
|
+
* transient preview URLs get cleared, so 2D/AI images disappear from the
|
|
23
|
+
* checkout. Mirrors the backend resolveUploadTarget routing, incl. variants.
|
|
24
|
+
*/
|
|
25
|
+
private syncUploadedUrlsToLocalBasket;
|
|
26
|
+
private validateAndFilterPendingUploads;
|
|
27
|
+
private initUploads;
|
|
28
|
+
private uploadPendingFiles;
|
|
16
29
|
saveBasket({ jwt, basket, awaitPDF, utmCampaign, saveToApi2, sessionGuid, apiKey }: SaveBasketProps): Promise<any>;
|
|
17
30
|
api2SaveBasket({ basket, sessionGuid, awaitPDF, _id }: SaveBasketProps2): Promise<BASKET_SAVE_ERROR.ERROR_BASKET_AFTER_SAVE | undefined>;
|
|
18
31
|
setOrdered({ serviceUrl, organizationId, jwt, divaNr, documentVersion }: SetOrderedProps): Promise<void>;
|