@crystaldesign/diva-seller 26.12.0 → 26.13.0-beta.10

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.
@@ -8037,6 +8037,37 @@ function useProduct(basket) {
8037
8037
  };
8038
8038
  }
8039
8039
 
8040
+ /** The basket fields the seller-basket initialization is derived from. */
8041
+
8042
+ /** Labels of the `onInitSellerBasket` business event — the catalog part of `onInitializeConfigurator`. */
8043
+
8044
+ /**
8045
+ * Builds the analytics payload for a basket that is opened in the seller without a configurator (archive, QR code,
8046
+ * deep link). Without it the configurator session would carry no catalog data, because `onInitializeConfigurator`
8047
+ * is only logged by the configurator. Only the first order set is used.
8048
+ *
8049
+ * @param basket the loaded basket
8050
+ * @param requestedDivaNr the divaNr the basket was opened with (the archive passes `DivaNr-DocumentVersion`)
8051
+ * @returns undefined for a basket without order sets
8052
+ */
8053
+ function getSellerBasketInit(basket, requestedDivaNr) {
8054
+ var _basket$OrderSets;
8055
+ var orderSet = (_basket$OrderSets = basket.OrderSets) === null || _basket$OrderSets === void 0 ? void 0 : _basket$OrderSets[0];
8056
+ if (!orderSet) return undefined;
8057
+ return {
8058
+ basketValue: orderSet.SetPrice,
8059
+ labels: {
8060
+ catalogCodex: orderSet.CatalogCodex,
8061
+ catalogName: orderSet.CatalogName,
8062
+ accountName: orderSet.AccountName,
8063
+ supplierId: orderSet.AccountGUID,
8064
+ originalProductId: basket.MatchingProductId || basket.OrigProductId,
8065
+ initializationType: 'SELLER_BASKET',
8066
+ initializationId: requestedDivaNr || basket.DivaNr
8067
+ }
8068
+ };
8069
+ }
8070
+
8040
8071
  function ownKeys$s(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; }
8041
8072
  function _objectSpread$s(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$s(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$s(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8042
8073
  var LOG$5 = getLogger('SellerBasket', 'Basket');
@@ -8090,8 +8121,30 @@ function Basket(_ref) {
8090
8121
  isLoading = _useProduct.isLoading,
8091
8122
  resetProductSaved = _useProduct.resetProductSaved;
8092
8123
  var statusRef = useRef(basket !== null && basket !== void 0 && basket.StatusKey ? basket === null || basket === void 0 ? void 0 : basket.StatusKey : basket !== null && basket !== void 0 && basket.Status ? basket === null || basket === void 0 ? void 0 : basket.Status : '');
8124
+ // Configurator session started by the basket itself, i.e. without a configurator: it still lacks the catalog data.
8125
+ var ownSessionIdRef = useRef();
8126
+ var startOwnSession = function startOwnSession() {
8127
+ DivaUtils$1.businessMetrics.setConfiguratorSessionId();
8128
+ ownSessionIdRef.current = DivaUtils$1.businessMetrics.getConfiguratorSessionId();
8129
+ };
8130
+ var logSellerBasketInit = function logSellerBasketInit(loadedBasket, requestedDivaNr, sessionIdAtOpen) {
8131
+ var ownSessionId = ownSessionIdRef.current;
8132
+ // Baskets handed over by the configurator already have its init event in their session, and a load overtaken
8133
+ // by a newer open belongs to an older session.
8134
+ if (!ownSessionId || ownSessionId !== sessionIdAtOpen || ownSessionId !== DivaUtils$1.businessMetrics.getConfiguratorSessionId()) return;
8135
+ if (!loadedBasket) return;
8136
+ var init = getSellerBasketInit(loadedBasket, requestedDivaNr);
8137
+ if (!init) return;
8138
+ // Once per session: loadBasket re-opens the seller with the loaded basket, which runs the loading effect again.
8139
+ ownSessionIdRef.current = undefined;
8140
+ LOG$5.businessEvent('onInitSellerBasket', 'SellerBasket', 'Basket opened without configurator', init.labels);
8141
+ LOG$5.businessEvent('onActualBasketValue', 'SellerBasket', 'Aktueller Basket Value: ' + init.basketValue, {
8142
+ basketValue: init.basketValue,
8143
+ isInit: true
8144
+ });
8145
+ };
8093
8146
  useEffect(function () {
8094
- if (!basket) DivaUtils$1.businessMetrics.setConfiguratorSessionId();
8147
+ if (!basket) startOwnSession();
8095
8148
  LOG$5.startTransaction({
8096
8149
  event: 'onOpenModule',
8097
8150
  message: 'Open Basket',
@@ -8104,12 +8157,16 @@ function Basket(_ref) {
8104
8157
  useEffect(function () {
8105
8158
  // Wait for the seller session to be established before loading the basket.
8106
8159
  if (!sessionGuid) return;
8107
- if (checkBasket === '1') DivaUtils$1.businessMetrics.setConfiguratorSessionId();
8108
- openBasket(statusRef, divaNr, checkBasket, basket, assignNewDivaNr).then(function () {
8160
+ // Opening from the archive starts a new session, also while the basket stays mounted.
8161
+ if (checkBasket === '1' || assignNewDivaNr) startOwnSession();
8162
+ var requestedDivaNr = divaNr;
8163
+ var sessionIdAtOpen = DivaUtils$1.businessMetrics.getConfiguratorSessionId();
8164
+ openBasket(statusRef, divaNr, checkBasket, basket, assignNewDivaNr).then(function (result) {
8109
8165
  var _getBasketStatusArr;
8110
8166
  LOG$5.successTransaction('ON_OPEN_MODULE_BASKET', {
8111
8167
  divaNr: divaNr
8112
8168
  });
8169
+ logSellerBasketInit(result === null || result === void 0 ? void 0 : result.basket, requestedDivaNr, sessionIdAtOpen);
8113
8170
  if (!statusRef.current || !((_getBasketStatusArr = getBasketStatusArr()) !== null && _getBasketStatusArr !== void 0 && _getBasketStatusArr.includes(statusRef.current))) {
8114
8171
  var _basketToUpdate, _currentBasketState$b;
8115
8172
  var basketToUpdate = basket;
@@ -8142,11 +8199,15 @@ function Basket(_ref) {
8142
8199
  setActBasketPage(currentBasketState === null || currentBasketState === void 0 ? void 0 : currentBasketState.step);
8143
8200
  }
8144
8201
  }, [currentBasketState === null || currentBasketState === void 0 ? void 0 : currentBasketState.step]);
8202
+ var hasSellerSession = !!sessionGuid;
8145
8203
  useEffect(function () {
8204
+ // Until the seller session exists the configurator session id is not final yet (cold load, archive open):
8205
+ // a step logged now would end up in a configurator session of its own.
8206
+ if (!hasSellerSession) return;
8146
8207
  LOG$5.businessEvent('onBasketStep', 'SellerBasket', "goto BasketStep '".concat(actBasketPage, "'"), {
8147
8208
  basketStep: actBasketPage
8148
8209
  });
8149
- }, [actBasketPage]);
8210
+ }, [actBasketPage, hasSellerSession]);
8150
8211
  if (!(currentBasketState !== null && currentBasketState !== void 0 && currentBasketState.basket) || loadingBasket) {
8151
8212
  return /*#__PURE__*/jsx(Fragment, {});
8152
8213
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Basket/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAOhD,OAAO,EAA0C,UAAU,EAAa,MAAM,0BAA0B,CAAC;AAQzG,UAAU,KAAK;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEzD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,KAAK,qBA8drF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Basket/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAOhD,OAAO,EAA0C,UAAU,EAAa,MAAM,0BAA0B,CAAC;AASzG,UAAU,KAAK;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEzD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,KAAK,qBA8frF"}
@@ -0,0 +1,32 @@
1
+ import type { BasketData, OrderSetData } from '@crystaldesign/diva-core';
2
+ /** The basket fields the seller-basket initialization is derived from. */
3
+ export interface SellerBasketInitSource extends Pick<BasketData, 'DivaNr' | 'MatchingProductId' | 'OrigProductId'> {
4
+ OrderSets?: Pick<OrderSetData, 'CatalogCodex' | 'CatalogName' | 'AccountName' | 'AccountGUID' | 'SetPrice'>[];
5
+ }
6
+ /** Labels of the `onInitSellerBasket` business event — the catalog part of `onInitializeConfigurator`. */
7
+ export interface SellerBasketInitLabels {
8
+ catalogCodex: string;
9
+ catalogName: string;
10
+ accountName: string;
11
+ /** The AccountGUID, logged under the same name as by the configurator. */
12
+ supplierId: string;
13
+ originalProductId?: string;
14
+ initializationType: 'SELLER_BASKET';
15
+ initializationId: string;
16
+ }
17
+ export interface SellerBasketInit {
18
+ /** Price of the first set — the same meaning as the configurator's `onActualBasketValue`. */
19
+ basketValue: number;
20
+ labels: SellerBasketInitLabels;
21
+ }
22
+ /**
23
+ * Builds the analytics payload for a basket that is opened in the seller without a configurator (archive, QR code,
24
+ * deep link). Without it the configurator session would carry no catalog data, because `onInitializeConfigurator`
25
+ * is only logged by the configurator. Only the first order set is used.
26
+ *
27
+ * @param basket the loaded basket
28
+ * @param requestedDivaNr the divaNr the basket was opened with (the archive passes `DivaNr-DocumentVersion`)
29
+ * @returns undefined for a basket without order sets
30
+ */
31
+ export declare function getSellerBasketInit(basket: SellerBasketInitSource, requestedDivaNr?: string): SellerBasketInit | undefined;
32
+ //# sourceMappingURL=sellerBasketInit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sellerBasketInit.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Basket/sellerBasketInit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEzE,0EAA0E;AAC1E,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,mBAAmB,GAAG,eAAe,CAAC;IAChH,SAAS,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,GAAG,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC;CAC/G;AAED,0GAA0G;AAC1G,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,eAAe,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,6FAA6F;IAC7F,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAgB1H"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sellerBasketInit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sellerBasketInit.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/sellerBasketInit.test.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crystaldesign/diva-seller",
3
- "version": "26.12.0",
3
+ "version": "26.13.0-beta.10",
4
4
  "description": "Seller-facing UI section with its own state provider and services.",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"
@@ -29,9 +29,9 @@
29
29
  "react-dom": "^18.3.1"
30
30
  },
31
31
  "dependencies": {
32
- "@crystaldesign/analytics": "26.12.0",
33
- "@crystaldesign/products-component": "26.12.0",
34
- "@crystaldesign/real-time-viewer": "26.12.0",
32
+ "@crystaldesign/analytics": "26.13.0-beta.10",
33
+ "@crystaldesign/products-component": "26.13.0-beta.10",
34
+ "@crystaldesign/real-time-viewer": "26.13.0-beta.10",
35
35
  "@emotion/react": "^11.13.3",
36
36
  "@emotion/styled": "^11.13.0",
37
37
  "@mui/icons-material": "7.3.11",
@@ -42,5 +42,5 @@
42
42
  },
43
43
  "types": "./build/types/seller/src/index.d.ts",
44
44
  "module": "build/esm/index.js",
45
- "gitHead": "d4df85c3d8be29aa239971a0a0b635f4caede915"
45
+ "gitHead": "6bdbcca31f8f620d8181ecdb32efb8c58b13b11a"
46
46
  }