@viu/emporix-sdk-react 2.7.0 → 2.9.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 useAddGroupMember, p as useAddToShoppingList, q as useAddressMutations, r as useAssignContact, s as useAvailabilities, t as useAvailability, v as useCancelOrder, w as useCart, x as useCartMutations, y as useCategories, z as useCategoriesInfinite, B as useCategory, D as useCategoryTree, E as useChangePassword, F as useCheckout, G as useCompany, H as useCompanyContacts, I as useCompanyGroups, J as useCompanyLocations, K as useCompanySwitcher, L as useCreateCart, M as useCreateCompany, N as useCreateLocation, O as useCreateReturn, Q as useCreateShoppingList, R as useCustomerAddresses, S as useCustomerSession, T as useDefaultSite, V as useDeleteCompany, W as useDeleteLocation, X as useDeleteShoppingList, Y as useMatchPrices, Z as useMatchPricesChunked, _ as useMyCompanies, $ as useMyOrders, a0 as useMyOrdersInfinite, a1 as useMyReturns, a2 as useMyRewardPoints, a3 as useMyRewardPointsSummary, a4 as useMySegmentCategories, a5 as useMySegmentCategoriesInfinite, a6 as useMySegmentCategoryTree, a7 as useMySegmentItems, a8 as useMySegmentProducts, a9 as useMySegmentProductsInfinite, aa as useMySegments, ab as useOrder, ac as useOrderTransition, ad as usePasswordReset, ae as usePaymentModes, af as useProduct, ag as useProductByCode, ah as useProductMedia, ai as useProductNameSearch, aj as useProductSearch, ak as useProducts, al as useProductsByCodes, am as useProductsInCategory, an as useProductsInCategoryInfinite, ao as useProductsInfinite, ap as useRedeemCoupon, aq as useRedeemOptions, ar as useRedeemRewardPoints, as as useRemoveFromShoppingList, at as useRemoveGroupMember, au as useReorder, av as useReturn, aw as useSalesOrder, ax as useSetShoppingListItemQuantity, ay as useShoppingLists, az as useSiteContext, aA as useSites, aB as useSubcategories, aC as useUnassignContact, aD as useUpdateCompany, aE as useUpdateContactAssignment, aF as useUpdateCustomer, aG as useUpdateLocation, aH as useUpdateSalesOrder, aI as useValidateCoupon, aJ as useVariantChildren } from './use-returns-D-P399mP.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 useAddGroupMember, p as useAddToShoppingList, q as useAddressMutations, r as useAssignContact, s as useAvailabilities, t as useAvailability, v as useCancelOrder, w as useCart, x as useCartMutations, y as useCategories, z as useCategoriesInfinite, B as useCategory, D as useCategoryTree, E as useChangePassword, F as useCheckout, G as useCompany, H as useCompanyContacts, I as useCompanyGroups, J as useCompanyLocations, K as useCompanySwitcher, L as useCreateCart, M as useCreateCompany, N as useCreateLocation, O as useCreateReturn, Q as useCreateShoppingList, R as useCustomerAddresses, S as useCustomerSession, T as useDefaultSite, V as useDeleteCompany, W as useDeleteLocation, X as useDeleteShoppingList, Y as useMatchPrices, Z as useMatchPricesChunked, _ as useMyCompanies, $ as useMyOrders, a0 as useMyOrdersInfinite, a1 as useMyReturns, a2 as useMyRewardPoints, a3 as useMyRewardPointsSummary, a4 as useMySegmentCategories, a5 as useMySegmentCategoriesInfinite, a6 as useMySegmentCategoryTree, a7 as useMySegmentItems, a8 as useMySegmentProducts, a9 as useMySegmentProductsInfinite, aa as useMySegments, ab as useOrder, ac as useOrderTransition, ad as usePasswordReset, ae as usePaymentModes, af as useProduct, ag as useProductByCode, ah as useProductMedia, ai as useProductNameSearch, aj as useProductSearch, ak as useProducts, al as useProductsByCodes, am as useProductsInCategory, an as useProductsInCategoryInfinite, ao as useProductsInfinite, ap as useRedeemCoupon, aq as useRedeemOptions, ar as useRedeemRewardPoints, as as useRemoveFromShoppingList, at as useRemoveGroupMember, au as useReorder, av as useReturn, aw as useSalesOrder, ax as useSetShoppingListItemQuantity, ay as useShoppingLists, az as useSiteContext, aA as useSites, aB as useSubcategories, aC as useUnassignContact, aD as useUpdateCompany, aE as useUpdateContactAssignment, aF as useUpdateCustomer, aG as useUpdateLocation, aH as useUpdateSalesOrder, aI as useValidateCoupon, aJ as useVariantChildren } from './use-returns-cBvLR-tm.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,5 +1,5 @@
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';
2
- import './chunk-SDRV73LG.js';
1
+ export { useActiveCart, useAddGroupMember, 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, useProductNameSearch, useProductSearch, useProducts, useProductsByCodes, useProductsInCategory, useProductsInCategoryInfinite, useProductsInfinite, useRedeemCoupon, useRedeemOptions, useRedeemRewardPoints, useRemoveFromShoppingList, useRemoveGroupMember, useReorder, useReturn, useSalesOrder, useSetShoppingListItemQuantity, useShoppingLists, useSiteContext, useSites, useSubcategories, useUnassignContact, useUpdateApproval, useUpdateCompany, useUpdateContactAssignment, useUpdateCustomer, useUpdateLocation, useUpdateSalesOrder, useValidateCoupon, useVariantChildren } from './chunk-3W3TIKRV.js';
2
+ import './chunk-JZRSYM3W.js';
3
3
  import './chunk-FBQY2N7S.js';
4
4
  //# sourceMappingURL=hooks.js.map
5
5
  //# sourceMappingURL=hooks.js.map
package/dist/index.cjs CHANGED
@@ -304,7 +304,7 @@ function CompanyContextProvider({
304
304
  if (matched) {
305
305
  setActive(matched);
306
306
  if (storage.getActiveLegalEntityId() !== matched.id) {
307
- storage.setActiveLegalEntityId(matched.id);
307
+ storage.setActiveLegalEntityId(matched.id ?? null);
308
308
  }
309
309
  } else if (companies.length === 1) {
310
310
  await switchTo(companies[0] ?? null);
@@ -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,
@@ -963,6 +993,17 @@ function useProductSearch(query, params = {}, options = {}) {
963
993
  staleTime: PRODUCTS_STALE_TIME
964
994
  });
965
995
  }
996
+ function useProductNameSearch(term, params = {}, options = {}) {
997
+ const { client } = useEmporix();
998
+ const { ctx } = useReadAuth(options.auth);
999
+ const { siteCode } = useReadSite();
1000
+ return reactQuery.useQuery({
1001
+ queryKey: emporixKey("product-name-search", [term, params], { tenant: client.tenant, authKind: ctx.kind, siteCode }),
1002
+ enabled: typeof term === "string" && term.trim() !== "",
1003
+ queryFn: () => client.products.searchByName(term, params, ctx),
1004
+ staleTime: PRODUCTS_STALE_TIME
1005
+ });
1006
+ }
966
1007
  function useProductsByCodes(codes, options = {}) {
967
1008
  const { client } = useEmporix();
968
1009
  const { ctx } = useReadAuth(options.auth);
@@ -1191,7 +1232,12 @@ function useCartMutations(cartId) {
1191
1232
  if (c) qc.setQueryData(c.key, c.previous);
1192
1233
  },
1193
1234
  onSuccess: (cart, _v, c) => {
1194
- if (c) qc.setQueryData(c.key, cart);
1235
+ if (!c) return;
1236
+ if (cart && Array.isArray(cart.items)) {
1237
+ qc.setQueryData(c.key, cart);
1238
+ } else {
1239
+ void qc.invalidateQueries({ queryKey: c.key });
1240
+ }
1195
1241
  }
1196
1242
  });
1197
1243
  }
@@ -1210,7 +1256,9 @@ function useCartMutations(cartId) {
1210
1256
  ]
1211
1257
  } : prev
1212
1258
  ),
1213
- updateItem: make((id, v) => client.carts.updateItem(id, v.itemId, v.patch, ctx)),
1259
+ updateItem: make(
1260
+ (id, v) => client.carts.updateItem(id, v.itemId, v.patch, ctx, v.partial ? { partial: true } : {})
1261
+ ),
1214
1262
  removeItem: make(
1215
1263
  (id, v) => client.carts.removeItem(id, v.itemId, ctx),
1216
1264
  (prev, v) => prev ? { ...prev, items: (prev.items ?? []).filter((i) => i.id !== v.itemId) } : prev
@@ -1245,6 +1293,14 @@ function useActiveCart(opts) {
1245
1293
  const { activeCompany } = useActiveCompany();
1246
1294
  const [cartId, setCartId] = react.useState(() => storage.getCartId());
1247
1295
  const effectiveLegalEntityId = opts?.legalEntityId ?? activeCompany?.id;
1296
+ react.useEffect(() => {
1297
+ if (!storage.subscribeAll) return;
1298
+ return storage.subscribeAll((key) => {
1299
+ if (key !== "cartId") return;
1300
+ const next = storage.getCartId();
1301
+ setCartId((prev) => prev === next ? prev : next);
1302
+ });
1303
+ }, [storage]);
1248
1304
  react.useEffect(() => {
1249
1305
  if (cartId !== null) return;
1250
1306
  if (!opts?.create) return;
@@ -1711,6 +1767,24 @@ function useDeleteLocation() {
1711
1767
  onSuccess: () => qc.invalidateQueries({ predicate: (q) => q.queryKey.includes("locations") })
1712
1768
  });
1713
1769
  }
1770
+ function useAddGroupMember() {
1771
+ const { client } = useEmporix();
1772
+ const resolveAuth = useCustomerAuthResolver();
1773
+ const qc = reactQuery.useQueryClient();
1774
+ return reactQuery.useMutation({
1775
+ mutationFn: ({ groupId, member }) => client.customerGroups.addMember(groupId, member, resolveAuth()),
1776
+ onSuccess: () => qc.invalidateQueries({ predicate: (q) => q.queryKey.includes("groups") })
1777
+ });
1778
+ }
1779
+ function useRemoveGroupMember() {
1780
+ const { client } = useEmporix();
1781
+ const resolveAuth = useCustomerAuthResolver();
1782
+ const qc = reactQuery.useQueryClient();
1783
+ return reactQuery.useMutation({
1784
+ mutationFn: ({ groupId, userId }) => client.customerGroups.removeMember(groupId, userId, resolveAuth()),
1785
+ onSuccess: () => qc.invalidateQueries({ predicate: (q) => q.queryKey.includes("groups") })
1786
+ });
1787
+ }
1714
1788
  function useCompanySwitcher() {
1715
1789
  const ctx = useActiveCompany();
1716
1790
  const switchFn = react.useCallback(
@@ -1846,11 +1920,23 @@ function useReorder() {
1846
1920
  });
1847
1921
  const cartId = storage.getCartId();
1848
1922
  if (!cartId) throw new Error("useReorder: no active cart id in storage");
1849
- if (order.items.length === 0) return { added: 0, errors: [] };
1850
- const batchBody = order.items.map((item) => ({
1851
- product: { id: item.productId },
1852
- quantity: item.quantity
1853
- }));
1923
+ const batchBody = (order.entries ?? []).map((entry) => {
1924
+ const p = entry.price;
1925
+ if (!entry.itemYrn || !p?.priceId || p.originalAmount === void 0 || p.effectiveAmount === void 0 || !p.currency) {
1926
+ return null;
1927
+ }
1928
+ return {
1929
+ itemYrn: entry.itemYrn,
1930
+ quantity: entry.orderedAmount ?? entry.amount,
1931
+ price: {
1932
+ priceId: p.priceId,
1933
+ originalAmount: p.originalAmount,
1934
+ effectiveAmount: p.effectiveAmount,
1935
+ currency: p.currency
1936
+ }
1937
+ };
1938
+ }).filter((x) => x !== null);
1939
+ if (batchBody.length === 0) return { added: 0, errors: [] };
1854
1940
  const res = await client.carts.addItemsBatch(cartId, batchBody, ctx);
1855
1941
  let added = 0;
1856
1942
  const errors = [];
@@ -2085,6 +2171,7 @@ exports.prefetchOrder = prefetchOrder;
2085
2171
  exports.prefetchProduct = prefetchProduct;
2086
2172
  exports.useActiveCart = useActiveCart;
2087
2173
  exports.useActiveCompany = useActiveCompany;
2174
+ exports.useAddGroupMember = useAddGroupMember;
2088
2175
  exports.useAddToShoppingList = useAddToShoppingList;
2089
2176
  exports.useAddressMutations = useAddressMutations;
2090
2177
  exports.useAssignContact = useAssignContact;
@@ -2140,6 +2227,7 @@ exports.usePaymentModes = usePaymentModes;
2140
2227
  exports.useProduct = useProduct;
2141
2228
  exports.useProductByCode = useProductByCode;
2142
2229
  exports.useProductMedia = useProductMedia;
2230
+ exports.useProductNameSearch = useProductNameSearch;
2143
2231
  exports.useProductSearch = useProductSearch;
2144
2232
  exports.useProducts = useProducts;
2145
2233
  exports.useProductsByCodes = useProductsByCodes;
@@ -2150,6 +2238,7 @@ exports.useRedeemCoupon = useRedeemCoupon;
2150
2238
  exports.useRedeemOptions = useRedeemOptions;
2151
2239
  exports.useRedeemRewardPoints = useRedeemRewardPoints;
2152
2240
  exports.useRemoveFromShoppingList = useRemoveFromShoppingList;
2241
+ exports.useRemoveGroupMember = useRemoveGroupMember;
2153
2242
  exports.useReorder = useReorder;
2154
2243
  exports.useReturn = useReturn;
2155
2244
  exports.useSalesOrder = useSalesOrder;