@viu/emporix-sdk-react 2.7.0 → 2.8.0

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/hooks.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- export { A as AddressMutationsApi, C as CartMutationsApi, a as CheckoutApi, b as CompanySwitcherApi, c as CouponActionVars, d as CustomerSessionApi, P as PasswordResetApi, U as UseAvailabilitiesOptions, e as UseAvailabilityOptions, f as UseCancelOrderVars, g as UseMyOrdersInfiniteOptions, h as UseMyOrdersOptions, i as UseOrderOptions, j as UseOrderTransitionVars, k as UseReorderResult, l as UseReorderVars, m as UseUpdateSalesOrderVars, n as UseVariantChildrenOptions, u as useActiveCart, o as useAddToShoppingList, p as useAddressMutations, q as useAssignContact, r as useAvailabilities, s as useAvailability, t as useCancelOrder, v as useCart, w as useCartMutations, x as useCategories, y as useCategoriesInfinite, z as useCategory, B as useCategoryTree, D as useChangePassword, E as useCheckout, F as useCompany, G as useCompanyContacts, H as useCompanyGroups, I as useCompanyLocations, J as useCompanySwitcher, K as useCreateCart, L as useCreateCompany, M as useCreateLocation, N as useCreateReturn, O as useCreateShoppingList, Q as useCustomerAddresses, R as useCustomerSession, S as useDefaultSite, T as useDeleteCompany, V as useDeleteLocation, W as useDeleteShoppingList, X as useMatchPrices, Y as useMatchPricesChunked, Z as useMyCompanies, _ as useMyOrders, $ as useMyOrdersInfinite, a0 as useMyReturns, a1 as useMyRewardPoints, a2 as useMyRewardPointsSummary, a3 as useMySegmentCategories, a4 as useMySegmentCategoriesInfinite, a5 as useMySegmentCategoryTree, a6 as useMySegmentItems, a7 as useMySegmentProducts, a8 as useMySegmentProductsInfinite, a9 as useMySegments, aa as useOrder, ab as useOrderTransition, ac as usePasswordReset, ad as usePaymentModes, ae as useProduct, af as useProductByCode, ag as useProductMedia, ah as useProductSearch, ai as useProducts, aj as useProductsByCodes, ak as useProductsInCategory, al as useProductsInCategoryInfinite, am as useProductsInfinite, an as useRedeemCoupon, ao as useRedeemOptions, ap as useRedeemRewardPoints, aq as useRemoveFromShoppingList, ar as useReorder, as as useReturn, at as useSalesOrder, au as useSetShoppingListItemQuantity, av as useShoppingLists, aw as useSiteContext, ax as useSites, ay as useSubcategories, az as useUnassignContact, aA as useUpdateCompany, aB as useUpdateContactAssignment, aC as useUpdateCustomer, aD as useUpdateLocation, aE as useUpdateSalesOrder, aF as useValidateCoupon, aG as useVariantChildren } from './use-returns-BMcuyi9J.cjs';
1
+ export { A as AddressMutationsApi, C as CartMutationsApi, a as CheckoutApi, b as CompanySwitcherApi, c as CouponActionVars, d as CustomerSessionApi, P as PasswordResetApi, U as UseAvailabilitiesOptions, e as UseAvailabilityOptions, f as UseCancelOrderVars, g as UseMyOrdersInfiniteOptions, h as UseMyOrdersOptions, i as UseOrderOptions, j as UseOrderTransitionVars, k as UseReorderResult, l as UseReorderVars, m as UseUpdateSalesOrderVars, n as UseVariantChildrenOptions, u as useActiveCart, o as useAddToShoppingList, p as useAddressMutations, q as useAssignContact, r as useAvailabilities, s as useAvailability, t as useCancelOrder, v as useCart, w as useCartMutations, x as useCategories, y as useCategoriesInfinite, z as useCategory, B as useCategoryTree, D as useChangePassword, E as useCheckout, F as useCompany, G as useCompanyContacts, H as useCompanyGroups, I as useCompanyLocations, J as useCompanySwitcher, K as useCreateCart, L as useCreateCompany, M as useCreateLocation, N as useCreateReturn, O as useCreateShoppingList, Q as useCustomerAddresses, R as useCustomerSession, S as useDefaultSite, T as useDeleteCompany, V as useDeleteLocation, W as useDeleteShoppingList, X as useMatchPrices, Y as useMatchPricesChunked, Z as useMyCompanies, _ as useMyOrders, $ as useMyOrdersInfinite, a0 as useMyReturns, a1 as useMyRewardPoints, a2 as useMyRewardPointsSummary, a3 as useMySegmentCategories, a4 as useMySegmentCategoriesInfinite, a5 as useMySegmentCategoryTree, a6 as useMySegmentItems, a7 as useMySegmentProducts, a8 as useMySegmentProductsInfinite, a9 as useMySegments, aa as useOrder, ab as useOrderTransition, ac as usePasswordReset, ad as usePaymentModes, ae as useProduct, af as useProductByCode, ag as useProductMedia, ah as useProductSearch, ai as useProducts, aj as useProductsByCodes, ak as useProductsInCategory, al as useProductsInCategoryInfinite, am as useProductsInfinite, an as useRedeemCoupon, ao as useRedeemOptions, ap as useRedeemRewardPoints, aq as useRemoveFromShoppingList, ar as useReorder, as as useReturn, at as useSalesOrder, au as useSetShoppingListItemQuantity, av as useShoppingLists, aw as useSiteContext, ax as useSites, ay as useSubcategories, az as useUnassignContact, aA as useUpdateCompany, aB as useUpdateContactAssignment, aC as useUpdateCustomer, aD as useUpdateLocation, aE as useUpdateSalesOrder, aF as useValidateCoupon, aG as useVariantChildren } from './use-returns-D9g9zYu1.cjs';
2
2
  import { UseQueryResult, UseMutationResult } from '@tanstack/react-query';
3
3
  import { ApprovalPatch, Approval, ApprovalList, ApprovalCreated, ApprovalInput } from '@viu/emporix-sdk';
4
4
  import './provider-WHISqTG2.cjs';
package/dist/hooks.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { A as AddressMutationsApi, C as CartMutationsApi, a as CheckoutApi, b as CompanySwitcherApi, c as CouponActionVars, d as CustomerSessionApi, P as PasswordResetApi, U as UseAvailabilitiesOptions, e as UseAvailabilityOptions, f as UseCancelOrderVars, g as UseMyOrdersInfiniteOptions, h as UseMyOrdersOptions, i as UseOrderOptions, j as UseOrderTransitionVars, k as UseReorderResult, l as UseReorderVars, m as UseUpdateSalesOrderVars, n as UseVariantChildrenOptions, u as useActiveCart, o as useAddToShoppingList, p as useAddressMutations, q as useAssignContact, r as useAvailabilities, s as useAvailability, t as useCancelOrder, v as useCart, w as useCartMutations, x as useCategories, y as useCategoriesInfinite, z as useCategory, B as useCategoryTree, D as useChangePassword, E as useCheckout, F as useCompany, G as useCompanyContacts, H as useCompanyGroups, I as useCompanyLocations, J as useCompanySwitcher, K as useCreateCart, L as useCreateCompany, M as useCreateLocation, N as useCreateReturn, O as useCreateShoppingList, Q as useCustomerAddresses, R as useCustomerSession, S as useDefaultSite, T as useDeleteCompany, V as useDeleteLocation, W as useDeleteShoppingList, X as useMatchPrices, Y as useMatchPricesChunked, Z as useMyCompanies, _ as useMyOrders, $ as useMyOrdersInfinite, a0 as useMyReturns, a1 as useMyRewardPoints, a2 as useMyRewardPointsSummary, a3 as useMySegmentCategories, a4 as useMySegmentCategoriesInfinite, a5 as useMySegmentCategoryTree, a6 as useMySegmentItems, a7 as useMySegmentProducts, a8 as useMySegmentProductsInfinite, a9 as useMySegments, aa as useOrder, ab as useOrderTransition, ac as usePasswordReset, ad as usePaymentModes, ae as useProduct, af as useProductByCode, ag as useProductMedia, ah as useProductSearch, ai as useProducts, aj as useProductsByCodes, ak as useProductsInCategory, al as useProductsInCategoryInfinite, am as useProductsInfinite, an as useRedeemCoupon, ao as useRedeemOptions, ap as useRedeemRewardPoints, aq as useRemoveFromShoppingList, ar as useReorder, as as useReturn, at as useSalesOrder, au as useSetShoppingListItemQuantity, av as useShoppingLists, aw as useSiteContext, ax as useSites, ay as useSubcategories, az as useUnassignContact, aA as useUpdateCompany, aB as useUpdateContactAssignment, aC as useUpdateCustomer, aD as useUpdateLocation, aE as useUpdateSalesOrder, aF as useValidateCoupon, aG as useVariantChildren } from './use-returns-FGAfGMpY.js';
1
+ export { A as AddressMutationsApi, C as CartMutationsApi, a as CheckoutApi, b as CompanySwitcherApi, c as CouponActionVars, d as CustomerSessionApi, P as PasswordResetApi, U as UseAvailabilitiesOptions, e as UseAvailabilityOptions, f as UseCancelOrderVars, g as UseMyOrdersInfiniteOptions, h as UseMyOrdersOptions, i as UseOrderOptions, j as UseOrderTransitionVars, k as UseReorderResult, l as UseReorderVars, m as UseUpdateSalesOrderVars, n as UseVariantChildrenOptions, u as useActiveCart, o as useAddToShoppingList, p as useAddressMutations, q as useAssignContact, r as useAvailabilities, s as useAvailability, t as useCancelOrder, v as useCart, w as useCartMutations, x as useCategories, y as useCategoriesInfinite, z as useCategory, B as useCategoryTree, D as useChangePassword, E as useCheckout, F as useCompany, G as useCompanyContacts, H as useCompanyGroups, I as useCompanyLocations, J as useCompanySwitcher, K as useCreateCart, L as useCreateCompany, M as useCreateLocation, N as useCreateReturn, O as useCreateShoppingList, Q as useCustomerAddresses, R as useCustomerSession, S as useDefaultSite, T as useDeleteCompany, V as useDeleteLocation, W as useDeleteShoppingList, X as useMatchPrices, Y as useMatchPricesChunked, Z as useMyCompanies, _ as useMyOrders, $ as useMyOrdersInfinite, a0 as useMyReturns, a1 as useMyRewardPoints, a2 as useMyRewardPointsSummary, a3 as useMySegmentCategories, a4 as useMySegmentCategoriesInfinite, a5 as useMySegmentCategoryTree, a6 as useMySegmentItems, a7 as useMySegmentProducts, a8 as useMySegmentProductsInfinite, a9 as useMySegments, aa as useOrder, ab as useOrderTransition, ac as usePasswordReset, ad as usePaymentModes, ae as useProduct, af as useProductByCode, ag as useProductMedia, ah as useProductSearch, ai as useProducts, aj as useProductsByCodes, ak as useProductsInCategory, al as useProductsInCategoryInfinite, am as useProductsInfinite, an as useRedeemCoupon, ao as useRedeemOptions, ap as useRedeemRewardPoints, aq as useRemoveFromShoppingList, ar as useReorder, as as useReturn, at as useSalesOrder, au as useSetShoppingListItemQuantity, av as useShoppingLists, aw as useSiteContext, ax as useSites, ay as useSubcategories, az as useUnassignContact, aA as useUpdateCompany, aB as useUpdateContactAssignment, aC as useUpdateCustomer, aD as useUpdateLocation, aE as useUpdateSalesOrder, aF as useValidateCoupon, aG as useVariantChildren } from './use-returns-96kuAgjF.js';
2
2
  import { UseQueryResult, UseMutationResult } from '@tanstack/react-query';
3
3
  import { ApprovalPatch, Approval, ApprovalList, ApprovalCreated, ApprovalInput } from '@viu/emporix-sdk';
4
4
  import './provider-CLNEKOuu.js';
package/dist/hooks.js CHANGED
@@ -1,4 +1,4 @@
1
- export { useActiveCart, useAddToShoppingList, useAddressMutations, useApproval, useApprovals, useAssignContact, useAvailabilities, useAvailability, useCancelOrder, useCart, useCartMutations, useCategories, useCategoriesInfinite, useCategory, useCategoryTree, useChangePassword, useCheckout, useCompany, useCompanyContacts, useCompanyGroups, useCompanyLocations, useCompanySwitcher, useCreateApproval, useCreateCart, useCreateCompany, useCreateLocation, useCreateReturn, useCreateShoppingList, useCustomerAddresses, useCustomerSession, useDefaultSite, useDeleteCompany, useDeleteLocation, useDeleteShoppingList, useMatchPrices, useMatchPricesChunked, useMyCompanies, useMyOrders, useMyOrdersInfinite, useMyReturns, useMyRewardPoints, useMyRewardPointsSummary, useMySegmentCategories, useMySegmentCategoriesInfinite, useMySegmentCategoryTree, useMySegmentItems, useMySegmentProducts, useMySegmentProductsInfinite, useMySegments, useOrder, useOrderTransition, usePasswordReset, usePaymentModes, useProduct, useProductByCode, useProductMedia, useProductSearch, useProducts, useProductsByCodes, useProductsInCategory, useProductsInCategoryInfinite, useProductsInfinite, useRedeemCoupon, useRedeemOptions, useRedeemRewardPoints, useRemoveFromShoppingList, useReorder, useReturn, useSalesOrder, useSetShoppingListItemQuantity, useShoppingLists, useSiteContext, useSites, useSubcategories, useUnassignContact, useUpdateApproval, useUpdateCompany, useUpdateContactAssignment, useUpdateCustomer, useUpdateLocation, useUpdateSalesOrder, useValidateCoupon, useVariantChildren } from './chunk-TJXNTSXN.js';
1
+ export { useActiveCart, useAddToShoppingList, useAddressMutations, useApproval, useApprovals, useAssignContact, useAvailabilities, useAvailability, useCancelOrder, useCart, useCartMutations, useCategories, useCategoriesInfinite, useCategory, useCategoryTree, useChangePassword, useCheckout, useCompany, useCompanyContacts, useCompanyGroups, useCompanyLocations, useCompanySwitcher, useCreateApproval, useCreateCart, useCreateCompany, useCreateLocation, useCreateReturn, useCreateShoppingList, useCustomerAddresses, useCustomerSession, useDefaultSite, useDeleteCompany, useDeleteLocation, useDeleteShoppingList, useMatchPrices, useMatchPricesChunked, useMyCompanies, useMyOrders, useMyOrdersInfinite, useMyReturns, useMyRewardPoints, useMyRewardPointsSummary, useMySegmentCategories, useMySegmentCategoriesInfinite, useMySegmentCategoryTree, useMySegmentItems, useMySegmentProducts, useMySegmentProductsInfinite, useMySegments, useOrder, useOrderTransition, usePasswordReset, usePaymentModes, useProduct, useProductByCode, useProductMedia, useProductSearch, useProducts, useProductsByCodes, useProductsInCategory, useProductsInCategoryInfinite, useProductsInfinite, useRedeemCoupon, useRedeemOptions, useRedeemRewardPoints, useRemoveFromShoppingList, useReorder, useReturn, useSalesOrder, useSetShoppingListItemQuantity, useShoppingLists, useSiteContext, useSites, useSubcategories, useUnassignContact, useUpdateApproval, useUpdateCompany, useUpdateContactAssignment, useUpdateCustomer, useUpdateLocation, useUpdateSalesOrder, useValidateCoupon, useVariantChildren } from './chunk-GRGWUXNB.js';
2
2
  import './chunk-SDRV73LG.js';
3
3
  import './chunk-FBQY2N7S.js';
4
4
  //# sourceMappingURL=hooks.js.map
package/dist/index.cjs CHANGED
@@ -674,6 +674,36 @@ async function bootstrapCart(opts) {
674
674
  });
675
675
  }
676
676
 
677
+ // src/hooks/internal/customer-session-store.ts
678
+ var stores = /* @__PURE__ */ new WeakMap();
679
+ function getCustomerSessionStore(storage) {
680
+ const existing = stores.get(storage);
681
+ if (existing) return existing;
682
+ let state = {
683
+ token: storage.getCustomerToken(),
684
+ refreshToken: null,
685
+ saasToken: null
686
+ };
687
+ const listeners = /* @__PURE__ */ new Set();
688
+ const store = {
689
+ getSnapshot: () => state,
690
+ setState: (next) => {
691
+ const resolved = typeof next === "function" ? next(state) : next;
692
+ if (resolved === state) return;
693
+ state = resolved;
694
+ for (const listener of listeners) listener();
695
+ },
696
+ subscribe: (listener) => {
697
+ listeners.add(listener);
698
+ return () => {
699
+ listeners.delete(listener);
700
+ };
701
+ }
702
+ };
703
+ stores.set(storage, store);
704
+ return store;
705
+ }
706
+
677
707
  // src/hooks/use-customer-session.ts
678
708
  var EMPTY_SESSION = {
679
709
  token: null,
@@ -684,14 +714,12 @@ function useCustomerSession() {
684
714
  const { client, storage } = useEmporix();
685
715
  const qc = reactQuery.useQueryClient();
686
716
  const siteCtx = react.useContext(EmporixSiteContext);
687
- const [session, setSession] = react.useState(() => ({
688
- token: storage.getCustomerToken(),
689
- refreshToken: null,
690
- saasToken: null
691
- }));
717
+ const store = react.useMemo(() => getCustomerSessionStore(storage), [storage]);
718
+ const session = react.useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);
719
+ const setSession = store.setState;
692
720
  react.useEffect(() => {
693
721
  return storage.subscribe?.((t) => setSession((s) => ({ ...s, token: t })));
694
- }, [storage]);
722
+ }, [storage, setSession]);
695
723
  const meQuery = reactQuery.useQuery({
696
724
  queryKey: ["emporix", "customer", "me", { tenant: client.tenant, hasToken: session.token !== null }],
697
725
  enabled: session.token !== null,
@@ -725,7 +753,7 @@ function useCustomerSession() {
725
753
  await qc.invalidateQueries({ queryKey: ["emporix", "customer"], refetchType: "none" });
726
754
  await qc.invalidateQueries({ queryKey: ["emporix", "cart"], refetchType: "none" });
727
755
  },
728
- [client, storage, qc, siteCtx]
756
+ [client, storage, qc, siteCtx, setSession]
729
757
  );
730
758
  const signup = react.useCallback(
731
759
  async (input) => {
@@ -757,7 +785,7 @@ function useCustomerSession() {
757
785
  await qc.invalidateQueries({ queryKey: ["emporix", "customer"], refetchType: "none" });
758
786
  await qc.invalidateQueries({ queryKey: ["emporix", "cart"], refetchType: "none" });
759
787
  },
760
- [client, storage, qc, siteCtx]
788
+ [client, storage, qc, siteCtx, setSession]
761
789
  );
762
790
  const socialLogin = react.useCallback(
763
791
  async (input) => {
@@ -781,10 +809,11 @@ function useCustomerSession() {
781
809
  storage.setCustomerToken(null);
782
810
  storage.setRefreshToken(null);
783
811
  storage.setActiveLegalEntityId(null);
812
+ storage.setCartId(null);
784
813
  setSession(EMPTY_SESSION);
785
814
  qc.removeQueries({ queryKey: ["emporix", "customer"] });
786
815
  qc.removeQueries({ queryKey: ["emporix", "cart"] });
787
- }, [client, session.token, storage, qc]);
816
+ }, [client, session.token, storage, qc, setSession]);
788
817
  const refresh = react.useCallback(async () => {
789
818
  await meQuery.refetch();
790
819
  }, [meQuery]);
@@ -803,10 +832,11 @@ function useCustomerSession() {
803
832
  }));
804
833
  await qc.invalidateQueries({ queryKey: ["emporix", "customer"] });
805
834
  await qc.invalidateQueries({ queryKey: ["emporix", "cart"] });
806
- }, [client, storage, qc, session.refreshToken, session.saasToken]);
835
+ }, [client, storage, qc, session.refreshToken, session.saasToken, setSession]);
807
836
  return {
808
837
  customerToken: session.token,
809
838
  refreshToken: session.refreshToken,
839
+ saasToken: session.saasToken,
810
840
  customer: meQuery.data ?? null,
811
841
  isAuthenticated: session.token !== null,
812
842
  isLoading: meQuery.isLoading && session.token !== null,
@@ -1191,7 +1221,12 @@ function useCartMutations(cartId) {
1191
1221
  if (c) qc.setQueryData(c.key, c.previous);
1192
1222
  },
1193
1223
  onSuccess: (cart, _v, c) => {
1194
- if (c) qc.setQueryData(c.key, cart);
1224
+ if (!c) return;
1225
+ if (cart && Array.isArray(cart.items)) {
1226
+ qc.setQueryData(c.key, cart);
1227
+ } else {
1228
+ void qc.invalidateQueries({ queryKey: c.key });
1229
+ }
1195
1230
  }
1196
1231
  });
1197
1232
  }
@@ -1210,7 +1245,9 @@ function useCartMutations(cartId) {
1210
1245
  ]
1211
1246
  } : prev
1212
1247
  ),
1213
- updateItem: make((id, v) => client.carts.updateItem(id, v.itemId, v.patch, ctx)),
1248
+ updateItem: make(
1249
+ (id, v) => client.carts.updateItem(id, v.itemId, v.patch, ctx, v.partial ? { partial: true } : {})
1250
+ ),
1214
1251
  removeItem: make(
1215
1252
  (id, v) => client.carts.removeItem(id, v.itemId, ctx),
1216
1253
  (prev, v) => prev ? { ...prev, items: (prev.items ?? []).filter((i) => i.id !== v.itemId) } : prev
@@ -1245,6 +1282,14 @@ function useActiveCart(opts) {
1245
1282
  const { activeCompany } = useActiveCompany();
1246
1283
  const [cartId, setCartId] = react.useState(() => storage.getCartId());
1247
1284
  const effectiveLegalEntityId = opts?.legalEntityId ?? activeCompany?.id;
1285
+ react.useEffect(() => {
1286
+ if (!storage.subscribeAll) return;
1287
+ return storage.subscribeAll((key) => {
1288
+ if (key !== "cartId") return;
1289
+ const next = storage.getCartId();
1290
+ setCartId((prev) => prev === next ? prev : next);
1291
+ });
1292
+ }, [storage]);
1248
1293
  react.useEffect(() => {
1249
1294
  if (cartId !== null) return;
1250
1295
  if (!opts?.create) return;