@growupsell/react-ecommerce-core 1.0.3 → 2.0.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/README.md CHANGED
@@ -16,21 +16,20 @@ npm i @growupsell/react-ecommerce-core @growupsell/api
16
16
  ## Quick start
17
17
 
18
18
  ```tsx
19
- import { AuthProvider, toast } from '@growupsell/react-ecommerce-core';
19
+ import { AuthProvider } from '@growupsell/react-ecommerce-core';
20
20
 
21
21
  export function AppRoot({ children }: { children: React.ReactNode }) {
22
22
  return <AuthProvider>{children}</AuthProvider>;
23
23
  }
24
-
25
- toast.success('Core package loaded');
26
24
  ```
27
25
 
28
26
  ## Exports
29
27
 
30
28
  - `@growupsell/react-ecommerce-core` - root exports
31
29
  - `@growupsell/react-ecommerce-core/provider` - provider-focused entry
32
- - `@growupsell/react-ecommerce-core/tailwind` - theme helpers (`applyTheme`, `colors`, `hexToRgb`, `rgbStringToHex`, theme types)
30
+ - `@growupsell/react-ecommerce-core/business-config-context` - narrow export for `BusinessConfigContext`
33
31
 
34
32
  ## Notes
35
33
 
36
34
  - This package depends on `@growupsell/api`.
35
+ - `ToastSupportProvider` / `useToastSupport` let cart and wishlist show messages without importing UI. On web, pass `toast` from `@growupsell/react-ecommerce-ui/toast` into `BaseProvider`; on React Native, pass your own implementation or omit (no-ops).
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+
5
+ // src/provider/BusinessConfigContext.tsx
6
+ var BusinessConfigContext = react.createContext({
7
+ currency: null,
8
+ reward_point_config: null,
9
+ orderConfig: null
10
+ });
11
+
12
+ exports.BusinessConfigContext = BusinessConfigContext;
13
+ //# sourceMappingURL=business-config-context.cjs.map
14
+ //# sourceMappingURL=business-config-context.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/provider/BusinessConfigContext.tsx"],"names":["createContext"],"mappings":";;;;;AAGO,IAAM,wBAAwBA,mBAAA,CAIlC;AAAA,EACD,QAAA,EAAU,IAAA;AAAA,EACV,mBAAA,EAAqB,IAAA;AAAA,EACrB,WAAA,EAAa;AACf,CAAC","file":"business-config-context.cjs","sourcesContent":["import { createContext } from 'react';\n\n/** Split out so `@growupsell/react-ecommerce-ui` can consume theme without importing the full provider graph. */\nexport const BusinessConfigContext = createContext<{\n currency: any;\n reward_point_config: any;\n orderConfig: any;\n}>({\n currency: null,\n reward_point_config: null,\n orderConfig: null,\n});\n"]}
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+
3
+ /** Split out so `@growupsell/react-ecommerce-ui` can consume theme without importing the full provider graph. */
4
+ declare const BusinessConfigContext: React.Context<{
5
+ currency: any;
6
+ reward_point_config: any;
7
+ orderConfig: any;
8
+ }>;
9
+
10
+ export { BusinessConfigContext };
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+
3
+ /** Split out so `@growupsell/react-ecommerce-ui` can consume theme without importing the full provider graph. */
4
+ declare const BusinessConfigContext: React.Context<{
5
+ currency: any;
6
+ reward_point_config: any;
7
+ orderConfig: any;
8
+ }>;
9
+
10
+ export { BusinessConfigContext };
@@ -0,0 +1,3 @@
1
+ export { BusinessConfigContext } from './chunk-SP77KIKJ.js';
2
+ //# sourceMappingURL=business-config-context.js.map
3
+ //# sourceMappingURL=business-config-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"business-config-context.js"}
@@ -0,0 +1,12 @@
1
+ import { createContext } from 'react';
2
+
3
+ // src/provider/BusinessConfigContext.tsx
4
+ var BusinessConfigContext = createContext({
5
+ currency: null,
6
+ reward_point_config: null,
7
+ orderConfig: null
8
+ });
9
+
10
+ export { BusinessConfigContext };
11
+ //# sourceMappingURL=chunk-SP77KIKJ.js.map
12
+ //# sourceMappingURL=chunk-SP77KIKJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/provider/BusinessConfigContext.tsx"],"names":[],"mappings":";;;AAGO,IAAM,wBAAwB,aAAA,CAIlC;AAAA,EACD,QAAA,EAAU,IAAA;AAAA,EACV,mBAAA,EAAqB,IAAA;AAAA,EACrB,WAAA,EAAa;AACf,CAAC","file":"chunk-SP77KIKJ.js","sourcesContent":["import { createContext } from 'react';\n\n/** Split out so `@growupsell/react-ecommerce-ui` can consume theme without importing the full provider graph. */\nexport const BusinessConfigContext = createContext<{\n currency: any;\n reward_point_config: any;\n orderConfig: any;\n}>({\n currency: null,\n reward_point_config: null,\n orderConfig: null,\n});\n"]}
@@ -1,11 +1,9 @@
1
- import { hexToRgb, applyTheme } from './chunk-AODG56I6.js';
1
+ import { BusinessConfigContext } from './chunk-SP77KIKJ.js';
2
2
  import { createContext, useState, useContext, useEffect, useMemo, useRef, useCallback } from 'react';
3
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
+ import { jsx, Fragment } from 'react/jsx-runtime';
4
4
  import { WAApi, api } from '@growupsell/api';
5
5
  import { retrieveThemeContent, updateThemeContent, getCustomPageContent, updateCustomPageContent, createCustomerSession, getBusinessSetting, getRewardPointBusinessConfig, getOrderBusinessConfig } from '@growupsell/api/api';
6
- import { ToastContainer, toast as toast$1 } from 'react-toastify';
7
6
  import 'lodash';
8
- import { FaWhatsapp } from 'react-icons/fa';
9
7
 
10
8
  var StorageContext = createContext({
11
9
  setItem: (key, data, type) => null,
@@ -154,11 +152,6 @@ var BusinessMediaProvider = (props) => {
154
152
  return /* @__PURE__ */ jsx(BusinessMediaContext.Provider, { value: { businessMedia, updateBusinessMedia }, children: props.children });
155
153
  };
156
154
  var useBusinessMedia = () => useContext(BusinessMediaContext);
157
- var BusinessConfigContext = createContext({
158
- currency: null,
159
- reward_point_config: null,
160
- orderConfig: null
161
- });
162
155
  var BusinessConfigProvider = ({
163
156
  children,
164
157
  data,
@@ -208,57 +201,28 @@ var BusinessConfigProvider = ({
208
201
  };
209
202
  var useBusinessContext = () => useContext(BusinessConfigContext);
210
203
  var useBusiness = () => useContext(BusinessConfigContext);
211
- var show = (type, message, options) => {
212
- const defaultOptions = {
213
- position: "top-right",
214
- autoClose: 3e3
204
+ function createNoopToastSupport() {
205
+ const noop = () => {
215
206
  };
216
- switch (type) {
217
- case "success":
218
- toast$1.success(message, {
219
- ...defaultOptions,
220
- ...options
221
- });
222
- break;
223
- case "error":
224
- toast$1.error(message, {
225
- ...defaultOptions,
226
- ...options
227
- });
228
- break;
229
- case "info":
230
- toast$1.info(message, {
231
- ...defaultOptions,
232
- ...options
233
- });
234
- break;
235
- case "warning":
236
- toast$1.warning(message, {
237
- ...defaultOptions,
238
- ...options
239
- });
240
- break;
241
- case "default":
242
- toast$1(message, {
243
- ...defaultOptions,
244
- ...options
245
- });
246
- break;
247
- default:
248
- toast$1(message, {
249
- ...defaultOptions,
250
- ...options
251
- });
252
- break;
253
- }
254
- };
255
- var toast = {
256
- success: (message, options) => show("success", message, options),
257
- error: (message, options) => show("error", message, options),
258
- info: (message, options) => show("info", message, options),
259
- warning: (message, options) => show("warning", message, options),
260
- default: (message, options) => show("default", message, options)
261
- };
207
+ return {
208
+ success: noop,
209
+ error: noop,
210
+ info: noop,
211
+ warning: noop,
212
+ default: noop
213
+ };
214
+ }
215
+ var ToastSupportContext = createContext(createNoopToastSupport());
216
+ function ToastSupportProvider({ children, value }) {
217
+ const api13 = useMemo(() => {
218
+ if (!value) return createNoopToastSupport();
219
+ return { ...createNoopToastSupport(), ...value };
220
+ }, [value]);
221
+ return /* @__PURE__ */ jsx(ToastSupportContext.Provider, { value: api13, children });
222
+ }
223
+ function useToastSupport() {
224
+ return useContext(ToastSupportContext);
225
+ }
262
226
  var CartWishlistRefreshContext = createContext({
263
227
  refreshType: null,
264
228
  setRefreshType: () => null
@@ -279,6 +243,7 @@ var CartContext = createContext({
279
243
  onChangeOffer: () => null,
280
244
  onChangeOrderType: () => null,
281
245
  session: {},
246
+ setSession: () => null,
282
247
  removeAppliedOffer: () => null,
283
248
  moveToWishlist: () => null,
284
249
  moveToWishlistLoading: false,
@@ -288,6 +253,7 @@ var CartContext = createContext({
288
253
  errorMessage: null
289
254
  });
290
255
  var CartProvider = (props) => {
256
+ const toast = useToastSupport();
291
257
  const [cartItems, setCartItems] = useState([]);
292
258
  const [orderFetchLoading, setOrderFetchLoading] = useState(true);
293
259
  const [addToCartLoading, setAddToCartLoading] = useState(false);
@@ -561,6 +527,7 @@ var CartProvider = (props) => {
561
527
  onChangeOffer,
562
528
  onChangeOrderType,
563
529
  session,
530
+ setSession,
564
531
  removeAppliedOffer,
565
532
  moveToWishlist,
566
533
  moveToWishlistLoading,
@@ -864,23 +831,6 @@ var ProductDetailProvider = (props) => {
864
831
  );
865
832
  };
866
833
  var useProductDetail = () => useContext(ProductDetailContext);
867
- var ThemeContext = createContext({
868
- themeRGB: {}
869
- });
870
- function ThemeProvider(props) {
871
- const config = useContext(BusinessConfigContext);
872
- const { theme } = config;
873
- const pcolor = hexToRgb(theme?.primary_color);
874
- const primaryColor = !!pcolor ? pcolor : "0, 72, 76";
875
- useEffect(() => {
876
- applyTheme({ primary: primaryColor });
877
- }, []);
878
- const value = useMemo(() => {
879
- return { themeRGB: { primary: primaryColor } };
880
- }, [primaryColor]);
881
- return /* @__PURE__ */ jsx(ThemeContext.Provider, { value, children: props.children });
882
- }
883
- var useTheme = () => useContext(ThemeContext);
884
834
  var ProductConfigContext = createContext({});
885
835
  var ProductConfigProvider = (props) => {
886
836
  const [productConfig, setProductConfig] = useState({});
@@ -1194,6 +1144,7 @@ var WishlistContext = createContext({
1194
1144
  moveToCartLoading: false
1195
1145
  });
1196
1146
  var WishlistProvider = (props) => {
1147
+ const toast = useToastSupport();
1197
1148
  const [wishlistItems, setWishlistItems] = useState([]);
1198
1149
  const { user } = useAuth();
1199
1150
  const [fetchWishlistLoading, setFetchWishlistLoading] = useState(true);
@@ -1826,16 +1777,6 @@ var MenuCartProvider = (props) => {
1826
1777
  );
1827
1778
  };
1828
1779
  var useMenuCart = () => useContext(MenuCartContext);
1829
- var ToastProvider = () => {
1830
- return /* @__PURE__ */ jsx(
1831
- ToastContainer,
1832
- {
1833
- position: "top-right",
1834
- autoClose: 3e3,
1835
- theme: "colored"
1836
- }
1837
- );
1838
- };
1839
1780
  var REFERRAL_STORAGE_KEY = "referralCode";
1840
1781
  var ReferralCodeContext = createContext(null);
1841
1782
  function ReferralCodeProvider({
@@ -1890,32 +1831,6 @@ var LiveSupportWidgetProvider = ({ children }) => {
1890
1831
  return /* @__PURE__ */ jsx(LiveSupportWidgetContext.Provider, { value: { config, loading }, children });
1891
1832
  };
1892
1833
  var useLiveSupportWidget = () => useContext(LiveSupportWidgetContext);
1893
- function LiveSupportWidget() {
1894
- const { config, loading } = useLiveSupportWidget();
1895
- if (loading || !config?.is_active || config?.type !== "whatsapp" || !config?.whatsapp_no?.trim()) {
1896
- return null;
1897
- }
1898
- const phone = config.whatsapp_no.replace(/\D/g, "");
1899
- const whatsappUrl = `https://wa.me/${phone}`;
1900
- const handleClick = () => {
1901
- window.open(whatsappUrl, "_blank", "noopener,noreferrer");
1902
- };
1903
- console.log(config);
1904
- console.log(loading);
1905
- return /* @__PURE__ */ jsx(
1906
- "button",
1907
- {
1908
- type: "button",
1909
- onClick: handleClick,
1910
- style: {
1911
- bottom: "15px"
1912
- },
1913
- className: "fixed bottom-6 fixed right-6 z-[9999] flex h-14 w-14 items-center justify-center rounded-full bg-[#25D366] text-white shadow-lg transition-transform hover:scale-105 focus:outline-none focus:ring-2 focus:ring-[#25D366] focus:ring-offset-2",
1914
- "aria-label": "Chat on WhatsApp",
1915
- children: /* @__PURE__ */ jsx(FaWhatsapp, { className: "h-8 w-8" })
1916
- }
1917
- );
1918
- }
1919
1834
  var BaseProvider = ({
1920
1835
  children,
1921
1836
  baseURL,
@@ -1926,14 +1841,12 @@ var BaseProvider = ({
1926
1841
  isHeader,
1927
1842
  isFooter,
1928
1843
  isAnnouncementBar,
1929
- referralCodeFromUrl = null
1844
+ referralCodeFromUrl = null,
1845
+ toast
1930
1846
  }) => {
1931
- return /* @__PURE__ */ jsx(StorageProvider, { storage, children: /* @__PURE__ */ jsx(BusinessConfigProvider, { data: businessConfig, baseURL, children: /* @__PURE__ */ jsx(ReferralCodeProvider, { referralCodeFromUrl, children: /* @__PURE__ */ jsx(ThemeEditProvider, { isThemeEdit: isEdit, token, isHeader, isFooter, isAnnouncementBar, children: /* @__PURE__ */ jsx(BusinessMediaProvider, { children: /* @__PURE__ */ jsx(CustomerConfigProvider, { children: /* @__PURE__ */ jsx(AuthProvider, { children: /* @__PURE__ */ jsx(ModalProvider, { children: /* @__PURE__ */ jsx(ThemeProvider, { children: /* @__PURE__ */ jsxs(LiveSupportWidgetProvider, { children: [
1932
- businessConfig.category.type == "retail" ? /* @__PURE__ */ jsx(ProductConfigProvider, { children: /* @__PURE__ */ jsx(CartWishlistRefreshProvider, { children: /* @__PURE__ */ jsx(CartProvider, { children: /* @__PURE__ */ jsx(WishlistProvider, { children: /* @__PURE__ */ jsx(FilterProvider, { children: /* @__PURE__ */ jsx(Fragment, { children }) }) }) }) }) }) : /* @__PURE__ */ jsx(MenuCartProvider, { children: /* @__PURE__ */ jsx(MenuFilterProvider, { children: /* @__PURE__ */ jsx(Fragment, { children }) }) }),
1933
- /* @__PURE__ */ jsx(LiveSupportWidget, {})
1934
- ] }) }) }) }) }) }) }) }) }) });
1847
+ return /* @__PURE__ */ jsx(StorageProvider, { storage, children: /* @__PURE__ */ jsx(ToastSupportProvider, { value: toast, children: /* @__PURE__ */ jsx(BusinessConfigProvider, { data: businessConfig, baseURL, children: /* @__PURE__ */ jsx(ReferralCodeProvider, { referralCodeFromUrl, children: /* @__PURE__ */ jsx(ThemeEditProvider, { isThemeEdit: isEdit, token, isHeader, isFooter, isAnnouncementBar, children: /* @__PURE__ */ jsx(BusinessMediaProvider, { children: /* @__PURE__ */ jsx(CustomerConfigProvider, { children: /* @__PURE__ */ jsx(AuthProvider, { children: /* @__PURE__ */ jsx(ModalProvider, { children: /* @__PURE__ */ jsx(LiveSupportWidgetProvider, { children: businessConfig.category.type == "retail" ? /* @__PURE__ */ jsx(ProductConfigProvider, { children: /* @__PURE__ */ jsx(CartWishlistRefreshProvider, { children: /* @__PURE__ */ jsx(CartProvider, { children: /* @__PURE__ */ jsx(WishlistProvider, { children: /* @__PURE__ */ jsx(FilterProvider, { children: /* @__PURE__ */ jsx(Fragment, { children }) }) }) }) }) }) : /* @__PURE__ */ jsx(MenuCartProvider, { children: /* @__PURE__ */ jsx(MenuFilterProvider, { children: /* @__PURE__ */ jsx(Fragment, { children }) }) }) }) }) }) }) }) }) }) }) }) });
1935
1848
  };
1936
1849
 
1937
- export { AuthContext, AuthProvider, BaseProvider, BusinessConfigContext, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HeaderFooterContext, HeaderFooterProvider, HomeConfigContext, HomeConfigHeroSliderContext, HomeConfigHeroSliderProvider, HomeConfigProvider, LiveSupportWidgetProvider, MenuCartContext, MenuCartProvider, MenuFilterContext, MenuFilterProvider, ModalProvider, ProductConfigContext, ProductConfigProvider, ProductDetailContext, ProductDetailProvider, ReferralCodeProvider, StorageContext, StorageProvider, ThemeContext, ThemeEditContext, ThemeEditProvider, ThemeProvider, ToastProvider, WishlistContext, WishlistProvider, toast, useAuth, useBusiness, useBusinessContext, useBusinessMedia, useCart, useCartWishlistRefresh, useCustomPageConfig, useCustomer, useFilter, useHeaderFooter, useHomeConfig, useHomeConfigHeroSlider, useLiveSupportWidget, useMenuCart, useMenuFilter, useModal, useProductConfig, useProductDetail, useReferralCode, useStorage, useTheme, useThemeEdit, useWishlist };
1938
- //# sourceMappingURL=chunk-3O7WAXNM.js.map
1939
- //# sourceMappingURL=chunk-3O7WAXNM.js.map
1850
+ export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HeaderFooterContext, HeaderFooterProvider, HomeConfigContext, HomeConfigHeroSliderContext, HomeConfigHeroSliderProvider, HomeConfigProvider, LiveSupportWidgetProvider, MenuCartContext, MenuCartProvider, MenuFilterContext, MenuFilterProvider, ModalProvider, ProductConfigContext, ProductConfigProvider, ProductDetailContext, ProductDetailProvider, ReferralCodeProvider, StorageContext, StorageProvider, ThemeEditContext, ThemeEditProvider, ToastSupportProvider, WishlistContext, WishlistProvider, useAuth, useBusiness, useBusinessContext, useBusinessMedia, useCart, useCartWishlistRefresh, useCustomPageConfig, useCustomer, useFilter, useHeaderFooter, useHomeConfig, useHomeConfigHeroSlider, useLiveSupportWidget, useMenuCart, useMenuFilter, useModal, useProductConfig, useProductDetail, useReferralCode, useStorage, useThemeEdit, useToastSupport, useWishlist };
1851
+ //# sourceMappingURL=chunk-XL2AT5BD.js.map
1852
+ //# sourceMappingURL=chunk-XL2AT5BD.js.map