@growupsell/react-ecommerce-core 2.0.14 → 2.0.16

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.
@@ -946,6 +946,8 @@ var HomeConfigProvider = (props) => {
946
946
  const getThemeConfig = useCallback(async () => {
947
947
  if (!hasInitial) {
948
948
  setLoading(true);
949
+ } else {
950
+ return;
949
951
  }
950
952
  try {
951
953
  const response = await retrieveThemeContent(
@@ -962,7 +964,7 @@ var HomeConfigProvider = (props) => {
962
964
  }
963
965
  setIsInitialized(true);
964
966
  } catch (error) {
965
- console.error("Error fetching theme content:", error);
967
+ console.log("Error fetching theme content:", error);
966
968
  } finally {
967
969
  setLoading(false);
968
970
  }
@@ -1066,11 +1068,17 @@ var HomeConfigHeroSliderContext = createContext({
1066
1068
  onUpdateHeroSlider: () => null
1067
1069
  });
1068
1070
  var HomeConfigHeroSliderProvider = (props) => {
1069
- const [loading, setLoading] = useState(true);
1070
- const [heroSliderConfigData, setHeroSliderConfigData] = useState([]);
1071
+ const hasInitial = Array.isArray(props.initialThemeContent?.data);
1072
+ const [loading, setLoading] = useState(!hasInitial);
1073
+ const [heroSliderConfigData, setHeroSliderConfigData] = useState(
1074
+ () => hasInitial ? props.initialThemeContent.data : []
1075
+ );
1071
1076
  const { token } = useThemeEdit();
1072
1077
  const themeConfig = useContext(BusinessConfigContext);
1073
- const getHeroSliderConfig = async () => {
1078
+ const getHeroSliderConfig = useCallback(async () => {
1079
+ if (hasInitial) {
1080
+ return;
1081
+ }
1074
1082
  setLoading(true);
1075
1083
  try {
1076
1084
  const response = await retrieveThemeContent(
@@ -1078,13 +1086,15 @@ var HomeConfigHeroSliderProvider = (props) => {
1078
1086
  "hero_slider"
1079
1087
  );
1080
1088
  setHeroSliderConfigData(response.data);
1089
+ } catch (error) {
1090
+ console.error("Error fetching hero slider content:", error);
1081
1091
  } finally {
1082
1092
  setLoading(false);
1083
1093
  }
1084
- };
1094
+ }, [themeConfig.theme.id, hasInitial]);
1085
1095
  useEffect(() => {
1086
1096
  getHeroSliderConfig();
1087
- }, []);
1097
+ }, [getHeroSliderConfig]);
1088
1098
  const onUpdateHeroSlider = async (configToUpdate) => {
1089
1099
  setLoading(true);
1090
1100
  try {
@@ -1400,13 +1410,24 @@ var HeaderFooterContext = createContext({
1400
1410
  announcementConfig: {}
1401
1411
  });
1402
1412
  var HeaderFooterProvider = (props) => {
1403
- const [headerConfig, setHeaderConfig] = useState({});
1404
- const [footerConfig, setFooterConfig] = useState({});
1405
- const [announcementConfig, setAnnouncementConfig] = useState({});
1413
+ const hasInitial = props.initialThemeContent != null && "data" in props.initialThemeContent;
1414
+ const initialData = hasInitial ? props.initialThemeContent.data ?? {} : {};
1415
+ const [headerConfig, setHeaderConfig] = useState(
1416
+ () => props.page === "header" ? initialData : {}
1417
+ );
1418
+ const [footerConfig, setFooterConfig] = useState(
1419
+ () => props.page === "footer" ? initialData : {}
1420
+ );
1421
+ const [announcementConfig, setAnnouncementConfig] = useState(
1422
+ () => props.page === "announcement" ? initialData : {}
1423
+ );
1406
1424
  const { token } = useThemeEdit();
1407
1425
  const themeConfig = useBusiness();
1408
- const [loading, setLoading] = useState(true);
1426
+ const [loading, setLoading] = useState(!hasInitial);
1409
1427
  const getThemeConfig = useCallback(async () => {
1428
+ if (hasInitial) {
1429
+ return;
1430
+ }
1410
1431
  setLoading(true);
1411
1432
  try {
1412
1433
  const response = await api.retrieveThemeContent(
@@ -1421,7 +1442,7 @@ var HeaderFooterProvider = (props) => {
1421
1442
  } finally {
1422
1443
  setLoading(false);
1423
1444
  }
1424
- }, [themeConfig.theme.id]);
1445
+ }, [themeConfig.theme.id, hasInitial, props.page]);
1425
1446
  const onUpdateThemeContent = useCallback(
1426
1447
  async (configToUpdate) => {
1427
1448
  try {
@@ -1449,7 +1470,7 @@ var HeaderFooterProvider = (props) => {
1449
1470
  setLoading(false);
1450
1471
  }
1451
1472
  },
1452
- [props.page]
1473
+ [props.page, themeConfig.theme.id, token]
1453
1474
  );
1454
1475
  useEffect(() => {
1455
1476
  getThemeConfig();
@@ -1457,7 +1478,13 @@ var HeaderFooterProvider = (props) => {
1457
1478
  return /* @__PURE__ */ jsx(
1458
1479
  HeaderFooterContext.Provider,
1459
1480
  {
1460
- value: { headerConfig, footerConfig, onUpdateThemeContent, loading, announcementConfig },
1481
+ value: {
1482
+ headerConfig,
1483
+ footerConfig,
1484
+ onUpdateThemeContent,
1485
+ loading,
1486
+ announcementConfig
1487
+ },
1461
1488
  children: loading ? null : props.children
1462
1489
  }
1463
1490
  );
@@ -1917,5 +1944,5 @@ var BaseProvider = ({
1917
1944
  };
1918
1945
 
1919
1946
  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 };
1920
- //# sourceMappingURL=chunk-E66B7ABK.js.map
1921
- //# sourceMappingURL=chunk-E66B7ABK.js.map
1947
+ //# sourceMappingURL=chunk-ID4JKOXT.js.map
1948
+ //# sourceMappingURL=chunk-ID4JKOXT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/provider/StorageProvider.tsx","../src/provider/AuthProvider.tsx","../src/provider/BusinessMedia.tsx","../src/provider/BusinessProvider.tsx","../src/provider/ToastSupportProvider.tsx","../src/provider/CartWishlistRefreshProvider.tsx","../src/provider/CartProvider.tsx","../src/provider/FilterProvider.tsx","../src/provider/ProductDetailProvider.tsx","../src/provider/ProductConfig.tsx","../src/provider/CustomerConfigProvider.tsx","../src/provider/ThemeEditProvider.tsx","../src/provider/HomeConfigProvider.tsx","../src/provider/HomeConfigHeroSliderProvider.tsx","../src/provider/CustomPageConfigProvider.tsx","../src/provider/WishlistProvider.tsx","../src/provider/AuthModalProvider.tsx","../src/provider/HeaderFooterProvider.tsx","../src/provider/MenuFilterProvider.tsx","../src/provider/MenuCartProvider.tsx","../src/provider/ReferralCodeProvider.tsx","../src/provider/LiveSupportWidgetProvider.tsx","../src/provider/BaseProvider.tsx"],"names":["createContext","useState","useEffect","jsx","useContext","WAApi","rewardPoint","api","errorMessage","productDetail","_","useCallback","retrieveThemeContent","updateThemeContent","useRef"],"mappings":"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","file":"chunk-ID4JKOXT.js","sourcesContent":["import React, { createContext, useState, useEffect, useContext } from 'react';\n\nexport const StorageContext = createContext<{\n setItem: (key: string, data: any, type: any) => null;\n getItem: (key: string, type?: any) => null;\n clearAll: () => null;\n removeItem: (key: string, type?: any) => null;\n}>({\n setItem: (key: string, data: any, type: any) => null,\n getItem: (key: string) => null,\n clearAll: () => null,\n removeItem: (key: string) => null,\n});\n\ntype Props = {\n storage: any;\n};\n\nexport const StorageProvider = (props: React.PropsWithChildren<Props>) => {\n const [loading, setLoading] = useState(false);\n\n return (\n <StorageContext.Provider\n value={{\n setItem: props.storage.setItem,\n getItem: props.storage.getItem,\n clearAll: props.storage.clearAll,\n removeItem: props.storage.removeItem,\n }}\n >\n {loading ? null : props.children}\n </StorageContext.Provider>\n );\n};\n\nexport const useStorage = () => useContext(StorageContext);\n","import React, { createContext, useContext, useEffect, useState } from \"react\";\nimport { WAApi } from \"@growupsell/api\";\nimport { useStorage } from \"./StorageProvider\";\nimport { createCustomerSession } from \"@growupsell/api/api\";\n\nexport const AuthContext = createContext<{\n signIn: (data: any, rememberMe: boolean) => void;\n signOut: () => void;\n user: any;\n setUser: (o: any) => void;\n customerSession: any;\n loadingToken: any;\n loadingUser: any;\n token: any;\n userDataStoredLocation: \"local\" | \"session\" | null;\n}>({\n signIn: () => null,\n signOut: () => null,\n user: null,\n setUser: (o: any) => null,\n customerSession: null,\n loadingToken: null,\n loadingUser: null,\n token: null,\n userDataStoredLocation: null,\n});\n\nexport const AuthProvider = (props: React.PropsWithChildren) => {\n const [user, setUser] = useState<any>(null);\n const [loading, setLoading] = useState(true);\n const [customerSession, setCustomerSession] = useState();\n const [loadingUser, setLoadingUser] = useState(true);\n const [loadingToken, setLoadingToken] = useState(false);\n const storage = useStorage();\n const [token, setToken] = useState();\n const [userDataStoredLocation, setUserDataStoredLocation] = useState<\n \"local\" | \"session\" | null\n >(null);\n\n const signIn = (data: any, rememberMe?: any) => {\n if (data.is_active) {\n WAApi.defaults.headers.common[\"x-customer-token\"] = `${data.token}`;\n }\n // TODO: need to think for if user is not active then active first\n const type = rememberMe ? \"local\" : \"session\";\n storage.setItem(\"user\", JSON.stringify(data), type);\n setUser(data);\n setUserDataStoredLocation(type);\n };\n\n const signOut = () => {\n setUser(null);\n setUserDataStoredLocation(null);\n storage.clearAll();\n delete WAApi.defaults.headers.common[\"x-customer-token\"];\n };\n\n let sessionCreationInProgress = false;\n const initializedCustomerSession = async () => {\n setLoading(true);\n if (sessionCreationInProgress) {\n return;\n }\n sessionCreationInProgress = true;\n let savedSession: any = storage.getItem(\"session\", \"session\")\n ? JSON.parse(storage.getItem(\"session\", \"session\")!)\n : null;\n if (savedSession) {\n setCustomerSession(savedSession);\n WAApi.defaults.headers.common[\"x-session-token\"] =\n savedSession?.session_token;\n } else {\n try {\n let body = {\n customer: user?.id,\n };\n const response = await createCustomerSession(body);\n setCustomerSession(response);\n WAApi.defaults.headers.common[\"x-session-token\"] =\n response?.session_token;\n storage.setItem(\"session\", JSON.stringify(response), \"session\");\n } catch (error) {\n console.log(\"Error--->\", error);\n }\n }\n\n setLoading(false);\n sessionCreationInProgress = false;\n };\n\n useEffect(() => {\n !loadingUser && initializedCustomerSession();\n }, [loadingUser]);\n\n useEffect(() => {\n setLoadingUser(true);\n let local_user = storage.getItem(\"user\", \"local\");\n let session_user = storage.getItem(\"user\", \"session\");\n\n if (local_user) {\n let customer = JSON.parse(local_user);\n WAApi.defaults.headers.common[\"x-customer-token\"] = customer.token;\n setUser(customer);\n setUserDataStoredLocation(\"local\");\n } else if (session_user) {\n let session_customer = JSON.parse(session_user);\n WAApi.defaults.headers.common[\"x-customer-token\"] =\n session_customer.token;\n setUser(session_customer);\n setUserDataStoredLocation(\"session\");\n }\n\n setLoadingUser(false);\n }, []);\n\n useEffect(() => {\n if (user) {\n setLoadingToken(true);\n try {\n if (user?.token) {\n WAApi.defaults.headers.common[\"x-customer-token\"] = user.token;\n setToken(user.token);\n }\n } catch (error) {\n console.log(\"User not available\");\n } finally {\n setLoadingToken(false);\n }\n }\n }, [user]);\n\n // if (loadingUser || loadingToken) {\n // return <div>Loading...</div>;\n // }\n\n return (\n <AuthContext.Provider\n value={{\n signIn,\n signOut,\n user,\n setUser,\n customerSession,\n loadingToken,\n loadingUser,\n token,\n userDataStoredLocation,\n }}\n >\n {loading ? null : props.children}\n {/* {props.children} */}\n </AuthContext.Provider>\n );\n};\n\nexport const useAuth = () => useContext(AuthContext);\n","import { api } from '@growupsell/api';\nimport React, { createContext, useContext, useEffect, useState } from 'react';\n\nexport const BusinessMediaContext = createContext({});\n\nexport const BusinessMediaProvider = (props: React.PropsWithChildren) => {\n const [businessMedia, setBusinessMeadia] = useState({});\n\n const fetchBusinessMedia = async () => {\n const response = await api.getBusinessMedia();\n setBusinessMeadia({ ...response });\n };\n\n const updateBusinessMedia = (data: object) => {\n setBusinessMeadia({ ...data });\n };\n\n useEffect(() => {\n fetchBusinessMedia();\n }, []);\n\n return (\n <BusinessMediaContext.Provider value={{ businessMedia, updateBusinessMedia }}>\n {props.children}\n </BusinessMediaContext.Provider>\n );\n};\n\nexport const useBusinessMedia = () => useContext(BusinessMediaContext);","import React, { useContext, useState } from 'react';\nimport { useEffect } from 'react';\nimport { WAApi } from '@growupsell/api';\nimport {\n getBusinessSetting,\n getOrderBusinessConfig,\n getRewardPointBusinessConfig,\n} from '@growupsell/api/api';\nimport { useAuth } from './AuthProvider';\nimport { BusinessConfigContext } from './BusinessConfigContext';\n\nexport { BusinessConfigContext };\n\nexport const BusinessConfigProvider = ({\n children,\n data,\n baseURL,\n}: {\n data: any;\n children: React.ReactNode;\n baseURL: string;\n}) => {\n WAApi.defaults.headers.common['business'] = data?.id;\n WAApi.defaults.baseURL = baseURL;\n\n const [loading, setLoading] = useState(true);\n const { user } = useAuth();\n const [currency, setCurrency] = useState<any>({});\n const [rewardPoint, setRewardPoint] = useState<any>({});\n const [orderConfig, setOrderConfig] = useState<any>({});\n const [domain, setDomain] = useState('');\n\n const fetchData = async () => {\n try {\n const [business_setting, rewardPoint, order_business_config] =\n await Promise.all([\n getBusinessSetting(),\n getRewardPointBusinessConfig(),\n getOrderBusinessConfig(),\n ]);\n setCurrency(business_setting.currency);\n setDomain(business_setting.domain);\n setRewardPoint(rewardPoint);\n setOrderConfig(order_business_config);\n } catch (error) {\n console.log('error in fetching data-->', error);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n fetchData();\n }, []);\n\n return (\n <BusinessConfigContext.Provider\n value={{\n ...data,\n currency: currency,\n reward_point_config: rewardPoint,\n domain,\n orderConfig,\n }}\n >\n {loading ? null : children}\n </BusinessConfigContext.Provider>\n );\n};\n\nexport const useBusinessContext = () => useContext(BusinessConfigContext);\nexport const useBusiness = () => useContext(BusinessConfigContext);\n","import React, {\n createContext,\n useContext,\n useMemo,\n type PropsWithChildren,\n} from 'react';\n\n/** Options bag for platform-specific toast implementations (e.g. react-toastify). */\nexport type ToastSupportOptions = Record<string, unknown>;\n\n/**\n * Pluggable toast API. Web passes the host app’s `toast` implementation (e.g. react-toastify wrapper);\n * React Native can pass a native implementation. Defaults are no-ops.\n */\nexport type ToastSupportApi = {\n success: (message: string, options?: ToastSupportOptions) => void;\n error: (message: string, options?: ToastSupportOptions) => void;\n info: (message: string, options?: ToastSupportOptions) => void;\n warning: (message: string, options?: ToastSupportOptions) => void;\n default: (message: string, options?: ToastSupportOptions) => void;\n};\n\nfunction createNoopToastSupport(): ToastSupportApi {\n const noop = () => {};\n return {\n success: noop,\n error: noop,\n info: noop,\n warning: noop,\n default: noop,\n };\n}\n\nconst ToastSupportContext = createContext<ToastSupportApi>(createNoopToastSupport());\n\ntype ToastSupportProviderProps = PropsWithChildren<{\n /** When omitted, all toast calls from core providers are no-ops (e.g. RN until wired). */\n value?: ToastSupportApi;\n}>;\n\nexport function ToastSupportProvider({ children, value }: ToastSupportProviderProps) {\n const api = useMemo(() => {\n if (!value) return createNoopToastSupport();\n return { ...createNoopToastSupport(), ...value };\n }, [value]);\n\n return (\n <ToastSupportContext.Provider value={api}>{children}</ToastSupportContext.Provider>\n );\n}\n\nexport function useToastSupport(): ToastSupportApi {\n return useContext(ToastSupportContext);\n}\n","import React, { createContext, useContext, useState } from 'react'\n\nexport const CartWishlistRefreshContext = createContext<{\n refreshType: 'cart' | 'wishlist' | null;\n setRefreshType: any;\n}>({\n refreshType: null,\n setRefreshType: () => null,\n})\n\nexport const CartWishlistRefreshProvider = (props: React.PropsWithChildren) => {\n const [refreshType, setRefreshType] = useState(null);\n\n return (\n <CartWishlistRefreshContext.Provider value={{ refreshType, setRefreshType }}>\n {props.children}\n </CartWishlistRefreshContext.Provider>\n )\n}\n\nexport const useCartWishlistRefresh = () => useContext(CartWishlistRefreshContext);","import React, { createContext, useState, useEffect, useContext } from 'react';\nimport _ from 'lodash';\nimport { api } from '@growupsell/api';\nimport { useAuth } from './AuthProvider';\nimport { useToastSupport } from './ToastSupportProvider';\nimport { useStorage } from './StorageProvider';\nimport { useCartWishlistRefresh } from './CartWishlistRefreshProvider';\n\nconst isArrayEqual = (a: any, b: any) => _.isEmpty(_.xorWith(a, b, _.isEqual));\n\ntype ORDER_TYPES = 'delivery' | 'cod';\n\nexport const CartContext = createContext<{\n cartItems: any[];\n addToCart: (\n sku: any,\n quantity: number,\n customData?: Record<string, unknown>,\n ) => Promise<boolean>;\n addToCartLoading: boolean;\n addToCartError: string | null;\n clearCart: () => void;\n onChangeAddress: (addressId: number, addressType: string) => void;\n onChangeTax: (tax_number: string, legal_name: string) => void;\n onChangeOffer: (offers: number | null) => void;\n onChangeOrderType: (type: ORDER_TYPES) => void;\n session: any;\n setSession: (session: any) => void;\n removeAppliedOffer: () => void;\n moveToWishlist: (sku: any) => void;\n moveToWishlistLoading: boolean;\n orderFetchLoading: boolean;\n onChangePromoCode: (promoCode: string | null) => void;\n onChangeGiftCard: (pin: number, code: string) => void;\n errorMessage?: string | null;\n}>({\n cartItems: [],\n addToCart: async () => false,\n addToCartLoading: false,\n addToCartError: null,\n clearCart: () => null,\n onChangeAddress: () => null,\n onChangeTax: () => null,\n onChangeOffer: () => null,\n onChangeOrderType: () => null,\n session: {},\n setSession: () => null,\n removeAppliedOffer: () => null,\n moveToWishlist: () => null,\n moveToWishlistLoading: false,\n orderFetchLoading: true,\n onChangePromoCode: () => null,\n onChangeGiftCard: () => null,\n errorMessage: null,\n});\n\nexport const CartProvider = (props: React.PropsWithChildren) => {\n const toast = useToastSupport();\n const [cartItems, setCartItems] = useState<any>([]);\n const [orderFetchLoading, setOrderFetchLoading] = useState(true);\n const [addToCartLoading, setAddToCartLoading] = useState(false);\n const [addToCartError, setAddToCartError] = useState<string | null>(null);\n const [moveToWishlistLoading, setMoveToWishlistLoading] = useState(false);\n const [session, setSession] = useState<any>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const { user } = useAuth();\n const storage = useStorage();\n const { refreshType, setRefreshType } = useCartWishlistRefresh();\n\n useEffect(() => {\n if (refreshType == 'cart') {\n fetchOrderDetail();\n setRefreshType(null);\n }\n }, [refreshType]);\n\n const onChangeAddress = async (addressId: number, addressType: string) => {\n let body = {};\n if (addressType === 'shipping') {\n body = {\n shipping_address: addressId,\n };\n } else if (addressType === 'billing') {\n body = {\n billing_address: addressId,\n };\n } else {\n body = {\n shipping_address: addressId,\n billing_address: addressId,\n };\n }\n try {\n if (!orderFetchLoading && session && user) {\n const response = await api.updateAddressCartOrder(body);\n setSession({\n ...session,\n shipping_address: response.shipping_address,\n billing_address: response.billing_address,\n });\n }\n } catch (error) {\n console.log('Error---->', error);\n }\n };\n\n const onChangePromoCode = async (promoCodeID: string | null) => {\n let body = {\n promo: promoCodeID,\n };\n try {\n if (!orderFetchLoading && session && user) {\n const response = await api.updateCartPromoCode(body);\n setSession({\n ...session,\n promo: response.promo,\n promo_redeem_amount: Number(response.promo_redeem_amount),\n final_payable_amount: Number(response.final_payable_amount),\n });\n if (promoCodeID) {\n toast.success('Promo code applied successfully');\n } else {\n toast.info('Promo code removed');\n }\n }\n } catch (error: any) {\n setErrorMessage(error?.response?.message);\n console.log('Error---->', error);\n const errorMsg = error?.response?.message || 'Failed to apply promo code';\n toast.error(errorMsg);\n }\n };\n\n const onChangeGiftCard = async (pin: number, code: string) => {\n let body = {\n pin,\n code,\n };\n try {\n if (!orderFetchLoading && session && user) {\n const response = await api.updateCartGiftCard(body);\n setSession({\n ...session,\n giftcard: response.giftcard,\n giftcard_redeem_amount: Number(response.giftcard_redeem_amount),\n final_payable_amount: Number(response.final_payable_amount),\n });\n setErrorMessage(null);\n fetchOrderDetail();\n }\n } catch (error: any) {\n setErrorMessage(error?.response?.message);\n console.log('Error---->', error);\n }\n };\n\n const onChangeOffer = async (offers: number | null) => {\n let body = {\n offer: offers,\n };\n try {\n if (!orderFetchLoading && session && user) {\n const response = await api.updateOfferCartOrder(body);\n const orderData = await api.getOrderCartDetail();\n setSession({\n ...session,\n offers: response.offers,\n final_payable_amount: Number(orderData.final_payable_amount),\n offer_redeem_amount: Number(orderData.offer_redeem_amount),\n });\n if (offers) {\n toast.success('Offer applied successfully');\n } else {\n toast.info('Offer removed');\n }\n fetchOrderDetail();\n }\n } catch (error) {\n console.log('Error---->', error);\n toast.error('Failed to apply offer');\n }\n };\n\n const onChangeOrderType = async (type: ORDER_TYPES) => {\n const prevType = session?.type;\n // Update UI immediately so checkbox reflects selection without waiting for API.\n setSession((prev: any) => ({\n ...prev,\n type,\n }));\n\n let body = { type };\n try {\n const response = await api.updateCartOrderType(body);\n setSession((prev: any) => ({\n ...prev,\n type: response?.type ?? type,\n }));\n } catch (error) {\n console.log('Error---->', error);\n // Roll back if API fails so local state stays consistent with backend.\n setSession((prev: any) => ({\n ...prev,\n type: prevType,\n }));\n toast.error('Something went wrong! Please try again.');\n }\n };\n\n const onChangeTax = async (legal_name: string, tax_number: string) => {\n let body = {\n tax_number,\n legal_name,\n };\n try {\n if (!orderFetchLoading && session && user) {\n const response = await api.updateTaxCartOrder(body);\n setSession({\n ...session,\n tax: response,\n });\n }\n } catch (error) {\n console.log('Error---->', error);\n }\n };\n\n useEffect(() => {\n session && storage.setItem('cart', JSON.stringify(session), 'local');\n }, [session]);\n\n const fetchOrderDetail = async () => {\n setOrderFetchLoading(true);\n const response = await api.getOrderCartDetail();\n setSession({\n ...session,\n ...response,\n });\n setCartItems(response.products);\n setOrderFetchLoading(false);\n };\n\n useEffect(() => {\n fetchOrderDetail();\n }, [user]);\n\n const removeAppliedOffer = async () => {\n setSession({\n ...session,\n offers: null,\n offer_redeem_amount: 0,\n });\n toast.info('Offer removed');\n };\n\n const addToCart = async (\n sku: any,\n quantity: number,\n customData?: Record<string, unknown>,\n ): Promise<boolean> => {\n setAddToCartLoading(true);\n setAddToCartError(null);\n setOrderFetchLoading(true);\n const hasCustomData =\n customData != null && Object.keys(customData).length > 0;\n let isItemInCart = hasCustomData\n ? null\n : cartItems?.find((item: any) => item.sku.id == sku);\n try {\n if (quantity === 0) {\n if (isItemInCart) {\n await api.deleteCartItem(isItemInCart.id);\n console.log('Item removed from cart');\n setCartItems(\n cartItems?.filter(\n (cartItem: any) => cartItem.id !== isItemInCart.id,\n ),\n );\n await fetchOrderDetail();\n }\n return true;\n }\n if (isItemInCart) {\n await api.updateCartItem(isItemInCart.id, {\n sku: isItemInCart.sku.id,\n qty: isItemInCart.qty + quantity,\n });\n await fetchOrderDetail();\n console.log('Cart item updated successfully');\n } else {\n let body: { qty: number; sku: any; custom_data?: Record<string, unknown> } = {\n qty: quantity,\n sku: sku,\n };\n if (hasCustomData) {\n body.custom_data = customData;\n }\n await api.addProductToCart(body);\n console.log('New item added to cart.');\n toast.success('Item added to cart');\n await fetchOrderDetail();\n }\n return true;\n } catch (error: any) {\n setOrderFetchLoading(false);\n console.log('Error---->', error);\n const message =\n error?.response?.message ||\n error?.response?.data?.message ||\n error?.message ||\n 'Unable to add to cart. Please try again.';\n setAddToCartError(message);\n toast.error(message);\n return false;\n } finally {\n setAddToCartLoading(false);\n }\n };\n\n const clearCart = () => {\n setCartItems([]);\n setSession(null);\n storage.removeItem('cart');\n fetchOrderDetail();\n };\n\n const moveToWishlist = async (id: number) => {\n let isItemInCart = cartItems?.find((item: any) => item.id === id);\n\n if (!isItemInCart) {\n console.log('Item not found in cart.');\n toast.warning('Item not found in cart');\n return;\n }\n\n try {\n setMoveToWishlistLoading(true);\n // First, try to add to wishlist\n let body = { sku: isItemInCart.sku.id };\n await api.addProductToWishlist(body);\n\n // Only if successfully added to wishlist, then remove from cart\n await api.deleteCartItem(isItemInCart.id);\n\n setCartItems((prevCartItems: any[]) =>\n prevCartItems.filter((cartItem) => cartItem.id !== isItemInCart.id),\n );\n\n toast.success('Item moved to wishlist');\n setRefreshType('wishlist');\n } catch (error: any) {\n console.error('Error moving item to wishlist:', error);\n const errorMessage =\n error?.response?.data?.message ||\n error?.response?.message ||\n 'Something went wrong! Please try again.';\n toast.error(errorMessage);\n } finally {\n setMoveToWishlistLoading(false);\n }\n };\n\n return (\n <CartContext.Provider\n value={{\n cartItems,\n addToCart,\n addToCartLoading,\n addToCartError,\n clearCart,\n onChangeAddress,\n onChangeTax,\n onChangeOffer,\n onChangeOrderType,\n session,\n setSession,\n removeAppliedOffer,\n moveToWishlist,\n moveToWishlistLoading,\n orderFetchLoading,\n onChangePromoCode,\n onChangeGiftCard,\n errorMessage,\n }}\n >\n {props.children}\n </CartContext.Provider>\n );\n};\n\nexport const useCart = () => useContext(CartContext);\n","import React, { createContext, useContext, useState, useEffect } from 'react';\nimport { api } from '@growupsell/api';\n\nexport const FilterContext = createContext<{\n selectedCategoryId: number[];\n addCategoryFilterId: (id: number) => void;\n removeCategoryFilterId: (id: number) => void;\n menuList: any[];\n productLoading: boolean;\n currentPage: number;\n handlePageChange: (page: number) => void;\n setMenuList: (x: any) => void;\n filterConfig: any;\n setSelectedSortOption: (x: string) => void;\n seletedRattingNumber: number | undefined | string;\n setSelectedRattingNumber: (x: any) => void;\n selectedDiscountOff: number | undefined;\n setSelectedDiscountOff: (x: any) => void;\n selectedMinPrice: number;\n selectedMaxPrice: number;\n setSelectedMinPrice: (x: any) => void;\n setSelectedMaxPrice: (x: any) => void;\n brandList: any[];\n selectedBrandId: any[];\n updateBrandIds: (x: any) => void;\n brandLoading: boolean;\n variantList: any[];\n selectedVariants: any[];\n updateSelectedVariants: (x: any) => void;\n variantLoading: boolean;\n total: number;\n limit: number;\n offset: number;\n}>({\n selectedCategoryId: [],\n addCategoryFilterId: () => null,\n removeCategoryFilterId: () => null,\n menuList: [],\n productLoading: true,\n currentPage: 1,\n handlePageChange: () => null,\n setMenuList: () => null,\n filterConfig: null,\n setSelectedSortOption: () => null,\n seletedRattingNumber: 0,\n setSelectedRattingNumber: () => null,\n selectedDiscountOff: 0,\n setSelectedDiscountOff: () => null,\n selectedMinPrice: 0,\n selectedMaxPrice: 0,\n setSelectedMinPrice: () => null,\n setSelectedMaxPrice: () => null,\n brandList: [],\n selectedBrandId: [],\n updateBrandIds: () => null,\n brandLoading: false,\n variantList: [],\n selectedVariants: [],\n updateSelectedVariants: () => null,\n variantLoading: false,\n total: 0,\n limit: 10,\n offset: 0,\n});\n\nexport const FilterProvider = (props: React.PropsWithChildren) => {\n const [filterConfig, setFilterConfig] = useState<any>();\n const [selectedCategoryId, setSelectedCategoryId] = useState<number[]>([]);\n const [selectedSortOption, setSelectedSortOption] =\n useState<string>('newest_first');\n const [seletedRattingNumber, setSelectedRattingNumber] = useState<any>();\n const [selectedDiscountOff, setSelectedDiscountOff] = useState();\n const [selectedMinPrice, setSelectedMinPrice] = useState(\n filterConfig?.price?.min,\n );\n const [selectedMaxPrice, setSelectedMaxPrice] = useState(\n filterConfig?.price?.max,\n );\n const [menuList, setMenuList] = useState([]);\n const [productLoading, setProductLoading] = useState(true);\n const [currentPage, setCurrentPage] = useState(1);\n const [filterConfigLoading, setFilterConfigLoading] = useState(false);\n const [brandList, setBrandList] = useState([]);\n const [selectedBrandId, setSelectedBrandId] = useState([]);\n const [brandLoading, setBrandLoading] = useState(false);\n const [variantList, setVariantList] = useState([]);\n const [selectedVariants, setSelectedVariants] = useState([]);\n const [variantLoading, setVariantLoading] = useState(false);\n const [limit, setLimit] = useState<number>(10);\n const [offset, setOffset] = useState<number>(0);\n const [total, setTotal] = useState(0);\n\n const fetchBrandList = async () => {\n setBrandLoading(true);\n let body = {\n category_ids: selectedCategoryId,\n };\n try {\n const brands = await api.getBrandList(body);\n setBrandList(brands);\n } catch (error) {\n console.log(error);\n } finally {\n setBrandLoading(false);\n }\n };\n\n const addCategoryFilterId = (id: number) => {\n setSelectedCategoryId((prevIds) => {\n if (prevIds.includes(id)) {\n return prevIds;\n }\n return [...prevIds, id];\n });\n setCurrentPage(1);\n };\n\n const fetchFilterConfig = async () => {\n setFilterConfigLoading(true);\n const response = await api.getProductFilterConfig();\n setFilterConfig(response);\n setFilterConfigLoading(false);\n };\n\n useEffect(() => {\n fetchFilterConfig();\n }, []);\n\n const removeCategoryFilterId = (id: number) => {\n setSelectedCategoryId((x) => {\n return x.filter((o) => o !== id);\n });\n setCurrentPage(1);\n };\n\n const fetchProductList = async () => {\n setProductLoading(true);\n let body = {\n category_id: selectedCategoryId,\n sort_by: selectedSortOption,\n min_rating: seletedRattingNumber,\n min_discount: selectedDiscountOff,\n min_price: selectedMinPrice,\n max_price: selectedMaxPrice,\n brand_ids: selectedCategoryId.length > 0 ? selectedBrandId : null,\n variants: selectedCategoryId.length > 0 ? selectedVariants : null,\n limit: limit,\n offset: offset,\n };\n try {\n const productSearch = await api.getProductSearch(body);\n setTotal(productSearch.count);\n setMenuList(productSearch.results);\n } catch (error) {\n console.log(error);\n } finally {\n setProductLoading(false);\n }\n };\n\n const updateBrandIds = (id: number) => {\n setSelectedBrandId((prevIds: any) => {\n if (prevIds.includes(id)) {\n return prevIds.filter((x: any) => x !== id);\n }\n return [...prevIds, id];\n });\n };\n\n const updateSelectedVariants = (label: string) => {\n setSelectedVariants((prevVariants: any) => {\n if (prevVariants.includes(label)) {\n return prevVariants.filter((x: any) => x !== label);\n }\n return [...prevVariants, label];\n });\n };\n\n const fetchVariantList = async () => {\n setVariantLoading(true);\n let body = {\n category_ids: selectedCategoryId,\n };\n const response = await api.getProductVariantByCategory(body);\n setVariantList(response);\n setVariantLoading(false);\n };\n\n useEffect(() => {\n if (!filterConfigLoading) {\n fetchProductList();\n }\n }, [\n selectedCategoryId,\n currentPage,\n selectedSortOption,\n seletedRattingNumber,\n selectedDiscountOff,\n selectedMinPrice,\n selectedMaxPrice,\n selectedBrandId,\n selectedVariants,\n limit,\n offset,\n ]);\n\n const handlePageChange = (newOffset: number) => {\n setOffset(newOffset);\n };\n\n useEffect(() => {\n if (selectedCategoryId.length > 0) {\n fetchBrandList();\n fetchVariantList();\n }\n }, [selectedCategoryId]);\n\n return (\n <FilterContext.Provider\n value={{\n selectedCategoryId,\n setMenuList,\n addCategoryFilterId,\n removeCategoryFilterId,\n menuList,\n productLoading,\n currentPage,\n handlePageChange,\n filterConfig,\n setSelectedSortOption,\n seletedRattingNumber,\n setSelectedRattingNumber,\n selectedDiscountOff,\n setSelectedDiscountOff,\n selectedMinPrice,\n selectedMaxPrice,\n setSelectedMinPrice,\n setSelectedMaxPrice,\n brandList,\n selectedBrandId,\n updateBrandIds,\n brandLoading,\n variantList,\n selectedVariants,\n updateSelectedVariants,\n variantLoading,\n total,\n limit,\n offset,\n }}\n >\n {!filterConfigLoading && props.children}\n </FilterContext.Provider>\n );\n};\n\nexport const useFilter = () => useContext(FilterContext);\n","import { api } from '@growupsell/api';\nimport React, { useState, createContext, useEffect, useContext } from 'react';\n\nexport const ProductDetailContext = createContext<{\n selectedVariants: any[];\n selectUnselectVariants: (type: string, value: string, id: number) => void;\n productDetail: any;\n waitProductLoading: boolean;\n setSelectedVariants: (x: any) => void;\n}>({\n selectedVariants: [],\n selectUnselectVariants: () => null,\n productDetail: [],\n waitProductLoading: true,\n setSelectedVariants: () => null,\n});\n\ntype Props = {\n productId: any;\n selected_variants: any;\n /** Server-fetched product detail for SSR / first paint (crawlers + LCP). */\n initialProductDetail?: any;\n};\n\nfunction resolveSelectedVariants(\n productDetail: any,\n selected_variants: any,\n): any[] {\n if (!productDetail?.variant) return [];\n\n if (selected_variants !== null && selected_variants !== undefined) {\n const selectedIds = String(selected_variants)\n .split(',')\n .map(Number)\n .filter((id) => Number.isFinite(id));\n\n return (\n productDetail.variant\n ?.map((vType: any) => {\n const matchedVariant = vType.variants.find((variant: any) =>\n selectedIds.includes(variant.id),\n );\n if (matchedVariant) {\n return {\n id: matchedVariant.id,\n type: vType.variant_type.type,\n value: matchedVariant.label,\n };\n }\n return null;\n })\n .filter(Boolean) || []\n );\n }\n\n return (\n productDetail.variant?.map((vType: any) => ({\n id: vType.variants[0].id,\n type: vType.variant_type.type,\n value: vType.variants[0].label,\n })) || []\n );\n}\n\nexport const ProductDetailProvider = (\n props: React.PropsWithChildren<Props>,\n) => {\n const hasInitial = Boolean(props.initialProductDetail);\n const [selectedVariants, setSelectedVariants] = useState<any>(() =>\n hasInitial\n ? resolveSelectedVariants(\n props.initialProductDetail,\n props.selected_variants,\n )\n : [],\n );\n const [productDetail, setProductDetail] = useState<any>(\n props.initialProductDetail ?? null,\n );\n const [waitProductLoading, setWaitProductLoading] = useState(!hasInitial);\n\n const selectUnselectVariants = (type: string, value: string, id: number) => {\n // Set loading to true when function is called\n setWaitProductLoading(true);\n\n setSelectedVariants((prev: any) => {\n const existingIndex = prev.findIndex((item: any) => item.type === type);\n\n if (existingIndex > -1) {\n const updatedVariants = [...prev];\n updatedVariants[existingIndex] = { type, value, id };\n return updatedVariants;\n } else {\n const newVariants = [...prev, { type, value, id }];\n return newVariants;\n }\n });\n\n setTimeout(() => {\n setWaitProductLoading(false);\n }, 1000); // 1 seconds delay\n };\n\n useEffect(() => {\n (async () => {\n // Keep SSR content visible; only show spinner when we have no initial data.\n if (!hasInitial) {\n setWaitProductLoading(true);\n }\n try {\n const productDetail = await api.getProductDetail(props.productId);\n setProductDetail(productDetail);\n setSelectedVariants(\n resolveSelectedVariants(productDetail, props.selected_variants),\n );\n } catch (error) {\n console.error('Error loading product details:', error);\n } finally {\n setWaitProductLoading(false);\n }\n })();\n }, [props.productId]);\n\n return (\n <ProductDetailContext.Provider\n value={{\n selectedVariants,\n setSelectedVariants,\n selectUnselectVariants,\n productDetail,\n waitProductLoading,\n }}\n >\n {props.children}\n </ProductDetailContext.Provider>\n );\n};\n\nexport const useProductDetail = () => useContext(ProductDetailContext);\n","import { api } from '@growupsell/api';\nimport React, { createContext, useContext, useEffect, useState } from 'react';\n\nexport const ProductConfigContext = createContext({});\n\nexport const ProductConfigProvider = (props: React.PropsWithChildren) => {\n const [productConfig, setProductConfig] = useState({});\n\n const fetchProductConfig = async () => {\n const response = await api.getProductConfig();\n setProductConfig({ ...response });\n };\n\n const updateProductConfig = (data: object) => {\n setProductConfig({ ...data });\n };\n\n useEffect(() => {\n fetchProductConfig();\n }, []);\n\n return (\n <ProductConfigContext.Provider\n value={{ productConfig, updateProductConfig }}\n >\n {props.children}\n </ProductConfigContext.Provider>\n );\n};\n\nexport const useProductConfig = () => useContext(ProductConfigContext);\n","import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { api } from '@growupsell/api';\n\nexport const CustomerConfigContext = createContext<{\n customerConfig: any;\n}>({ customerConfig: null });\n\nexport const CustomerConfigProvider = (props: React.PropsWithChildren) => {\n const [customerConfig, setCustomerConfig] = useState();\n const [loading, setLoading] = useState<boolean>(false);\n\n const fetchCustomerConfig = async () => {\n setLoading(true);\n try {\n const response = await api.getCustomerBusinessConfig();\n setCustomerConfig(response);\n } catch (error) {\n console.log('Error in fetching customer config---->', error);\n }\n setLoading(false);\n };\n\n useEffect(() => {\n fetchCustomerConfig();\n }, []);\n\n return (\n <CustomerConfigContext.Provider value={{ customerConfig }}>\n {loading ? null : props.children}\n </CustomerConfigContext.Provider>\n );\n};\n\nexport const useCustomer = () => useContext(CustomerConfigContext);\n","import React, { createContext, useContext, useState } from 'react';\n\nexport const ThemeEditContext = createContext<{\n token: string;\n isThemeEdit: boolean;\n isHeader: boolean;\n isFooter: boolean;\n isAnnouncementBar: boolean;\n}>({\n token: '',\n isThemeEdit: false,\n isHeader: false,\n isFooter: false,\n isAnnouncementBar: false,\n});\n\nexport const ThemeEditProvider = (props: {\n isThemeEdit: boolean;\n token: string;\n isHeader: boolean;\n isFooter: boolean;\n isAnnouncementBar: boolean;\n children: React.ReactNode;\n}) => {\n const [isThemeEdit, setIsThemeEdit] = useState(props.isThemeEdit);\n const [token, setToken] = useState(props.token);\n const [isHeader, setIsHeader] = useState(props.isHeader);\n const [isFooter, setIsFooter] = useState(props.isFooter);\n const [isAnnouncementBar, setIsAnnouncementBar] = useState(props.isAnnouncementBar);\n\n return (\n <ThemeEditContext.Provider\n value={{ token, isThemeEdit, isHeader, isFooter, isAnnouncementBar}}\n >\n {props.children}\n </ThemeEditContext.Provider>\n );\n};\n\nexport const useThemeEdit = () => useContext(ThemeEditContext);\n","import React, {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n useRef,\n} from \"react\";\nimport { retrieveThemeContent, updateThemeContent } from \"@growupsell/api/api\";\nimport { useThemeEdit } from \"./ThemeEditProvider\";\nimport { BusinessConfigContext } from \"./BusinessConfigContext\";\n\nexport const HomeConfigContext = createContext<{\n selectedConfig: any[];\n setSelectedConfig: (x: any) => void;\n addConfig: (x: any) => void;\n updateConfig: (config: any, index: number) => void;\n removeConfig: (index: number) => void;\n moveConfig: (fromIndex: number, toIndex: number) => void;\n themeConfigData: any;\n loading: boolean;\n}>({\n selectedConfig: [],\n setSelectedConfig: () => null,\n addConfig: () => null,\n updateConfig: () => null,\n removeConfig: () => null,\n moveConfig: () => null,\n themeConfigData: {},\n loading: true,\n});\n\nexport const HomeConfigProvider = (props: {\n page: string;\n children: React.ReactNode;\n /** Server-fetched theme content for SSR / first paint (crawlers). */\n initialThemeContent?: any;\n}) => {\n const hasInitial = Boolean(props.initialThemeContent);\n const [selectedConfig, setSelectedConfig] = useState<any[]>(() => {\n const data = props.initialThemeContent?.data;\n return Array.isArray(data)\n ? data.filter((item: any) => item !== null && item !== undefined)\n : [];\n });\n const { token } = useThemeEdit();\n const themeConfig: any = useContext(BusinessConfigContext);\n const [themeConfigData, setThemeConfigData] = useState<any>(\n props.initialThemeContent ?? {},\n );\n const [isInitialized, setIsInitialized] = useState(hasInitial);\n const updateRef = useRef(false);\n const [loading, setLoading] = useState(!hasInitial);\n\n const getThemeConfig = useCallback(async () => {\n if (!hasInitial) {\n setLoading(true);\n } else {\n return;\n }\n try {\n const response = await retrieveThemeContent(\n themeConfig.theme.id,\n props.page,\n );\n setThemeConfigData(response);\n if (response?.data && Array.isArray(response.data)) {\n setSelectedConfig(\n response.data.filter(\n (item: any) => item !== null && item !== undefined,\n ),\n );\n }\n setIsInitialized(true);\n } catch (error) {\n console.log(\"Error fetching theme content:\", error);\n } finally {\n setLoading(false);\n }\n }, [themeConfig.theme.id, hasInitial, props.page]);\n\n const onUpdateThemeContent = useCallback(\n async (configToUpdate = selectedConfig) => {\n try {\n const body = {\n data: configToUpdate,\n slug: props.page,\n platform: typeof window !== \"undefined\" ? \"website\" : \"app\",\n };\n\n // Prevent duplicate updates\n if (updateRef.current) return;\n updateRef.current = true;\n\n await updateThemeContent(\n body,\n themeConfig?.theme?.id,\n props.page,\n token,\n );\n const updatedResponse = await retrieveThemeContent(\n themeConfig.theme.id,\n props.page,\n );\n setThemeConfigData(updatedResponse);\n } catch (error) {\n console.error(\"Error updating theme content:\", error);\n } finally {\n updateRef.current = false;\n }\n },\n [isInitialized, token, themeConfig?.theme?.id, selectedConfig],\n );\n\n // Add new config\n const addConfig = useCallback(\n async (config: any) => {\n setSelectedConfig((prev) => {\n const newConfig = [...prev, config];\n onUpdateThemeContent(newConfig); // Update with new config\n return newConfig;\n });\n },\n [onUpdateThemeContent],\n );\n\n // Update existing config\n const updateConfig = useCallback(\n async (config: any, index: number) => {\n setSelectedConfig((prev) => {\n const newConfig = [...prev];\n newConfig[index] = config;\n onUpdateThemeContent(newConfig); // Update with modified config\n return newConfig;\n });\n },\n [onUpdateThemeContent],\n );\n\n const moveConfig = useCallback(\n (fromIndex: number, toIndex: number) => {\n setSelectedConfig((prev) => {\n const newConfig = [...prev];\n const [movedItem] = newConfig.splice(fromIndex, 1);\n newConfig.splice(toIndex, 0, movedItem);\n onUpdateThemeContent(newConfig);\n return newConfig;\n });\n },\n [onUpdateThemeContent],\n );\n\n // Remove config\n const removeConfig = useCallback(\n async (index: number) => {\n setSelectedConfig((prev) => {\n const newConfig = prev.filter((_, i) => i !== index);\n onUpdateThemeContent(newConfig); // Update with removed config\n return newConfig;\n });\n },\n [onUpdateThemeContent],\n );\n\n // Initial load\n useEffect(() => {\n getThemeConfig();\n }, [getThemeConfig]);\n\n return (\n <HomeConfigContext.Provider\n value={{\n selectedConfig,\n setSelectedConfig,\n addConfig,\n updateConfig,\n removeConfig,\n moveConfig,\n themeConfigData,\n loading,\n }}\n >\n {props.children}\n </HomeConfigContext.Provider>\n );\n};\n\nexport const useHomeConfig = () => useContext(HomeConfigContext);\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { retrieveThemeContent, updateThemeContent } from \"@growupsell/api/api\";\nimport { useThemeEdit } from \"./ThemeEditProvider\";\nimport { BusinessConfigContext } from \"./BusinessConfigContext\";\n\nexport const HomeConfigHeroSliderContext = createContext<{\n loading: boolean;\n heroSliderConfigData: any;\n onUpdateHeroSlider: (updatedSlides: any) => void;\n}>({\n loading: true,\n heroSliderConfigData: [],\n onUpdateHeroSlider: () => null,\n});\n\nexport const HomeConfigHeroSliderProvider = (props: {\n children: React.ReactNode;\n /** Server-fetched theme content for SSR / first paint (crawlers). */\n initialThemeContent?: any;\n}) => {\n const hasInitial = Array.isArray(props.initialThemeContent?.data);\n const [loading, setLoading] = useState(!hasInitial);\n const [heroSliderConfigData, setHeroSliderConfigData] = useState<any>(() =>\n hasInitial ? props.initialThemeContent.data : [],\n );\n const { token } = useThemeEdit();\n const themeConfig: any = useContext(BusinessConfigContext);\n\n const getHeroSliderConfig = useCallback(async () => {\n if (hasInitial) {\n return;\n }\n setLoading(true);\n try {\n const response = await retrieveThemeContent(\n themeConfig.theme.id,\n \"hero_slider\",\n );\n setHeroSliderConfigData(response.data);\n } catch (error) {\n console.error(\"Error fetching hero slider content:\", error);\n } finally {\n setLoading(false);\n }\n }, [themeConfig.theme.id, hasInitial]);\n\n useEffect(() => {\n getHeroSliderConfig();\n }, [getHeroSliderConfig]);\n\n const onUpdateHeroSlider = async (configToUpdate: any) => {\n setLoading(true);\n try {\n const body = {\n data: configToUpdate,\n slug: \"hero_slider\",\n platform: typeof window !== \"undefined\" ? \"website\" : \"app\",\n };\n await updateThemeContent(\n body,\n themeConfig?.theme?.id,\n \"hero_slider\",\n token,\n );\n const updatedResponse = await retrieveThemeContent(\n themeConfig.theme.id,\n \"hero_slider\",\n );\n setHeroSliderConfigData(updatedResponse.data);\n } catch (error) {\n console.error(\"Error updating theme content:\", error);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <HomeConfigHeroSliderContext.Provider\n value={{ loading, heroSliderConfigData, onUpdateHeroSlider }}\n >\n {props.children}\n </HomeConfigHeroSliderContext.Provider>\n );\n};\n\nexport const useHomeConfigHeroSlider = () =>\n useContext(HomeConfigHeroSliderContext);\n","import React, {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n useRef,\n} from 'react';\nimport {\n getCustomPageContent,\n updateCustomPageContent,\n splitCustomPageContent,\n mergeCustomPageContent,\n} from '@growupsell/api/api';\nimport { useThemeEdit } from './ThemeEditProvider';\nimport { HomeConfigHeroSliderContext } from './HomeConfigHeroSliderProvider';\n\nexport const CustomPageConfigContext = createContext<{\n selectedConfig: any[];\n setSelectedConfig: (x: any) => void;\n addConfig: (x: any) => void;\n updateConfig: (config: any, index: number) => void;\n removeConfig: (index: number) => void;\n moveConfig: (fromIndex: number, toIndex: number) => void;\n heroSliderConfigData: any[];\n onUpdateHeroSlider: (slides: any[]) => Promise<void>;\n loading: boolean;\n}>({\n selectedConfig: [],\n setSelectedConfig: () => null,\n addConfig: () => null,\n updateConfig: () => null,\n removeConfig: () => null,\n moveConfig: () => null,\n heroSliderConfigData: [],\n onUpdateHeroSlider: async () => undefined,\n loading: true,\n});\n\nexport const CustomPageConfigProvider = (props: {\n pageId: number;\n children: React.ReactNode;\n}) => {\n const { token } = useThemeEdit();\n const [selectedConfig, setSelectedConfig] = useState<any[]>([]);\n const [heroSliderConfigData, setHeroSliderConfigData] = useState<any[]>([]);\n const [loading, setLoading] = useState(true);\n const selectedConfigRef = useRef<any[]>([]);\n const heroSlidesRef = useRef<any[]>([]);\n const saveQueueRef = useRef<Promise<void>>(Promise.resolve());\n\n const load = useCallback(async () => {\n setLoading(true);\n try {\n const row = await getCustomPageContent(props.pageId, token);\n const fromContent = splitCustomPageContent(row?.content as unknown[]);\n // An explicit empty hero_content is authoritative. Fall back only when\n // an older backend omits the field.\n const slides = Array.isArray(row?.hero_content)\n ? row.hero_content\n : fromContent.heroSlides;\n selectedConfigRef.current = fromContent.blocks;\n heroSlidesRef.current = slides;\n setSelectedConfig(fromContent.blocks);\n setHeroSliderConfigData(slides);\n } catch (e) {\n console.error('Error loading custom page content:', e);\n } finally {\n setLoading(false);\n }\n }, [props.pageId, token]);\n\n /**\n * Serialize block and hero writes through one queue. Every queued operation\n * reads the latest refs, so a block edit cannot persist an older hero.\n */\n const persistLatest = useCallback(\n (writeHeroField = false) => {\n const run = async () => {\n try {\n const blocks = selectedConfigRef.current;\n const slides = heroSlidesRef.current;\n await updateCustomPageContent(\n props.pageId,\n {\n content: mergeCustomPageContent(blocks, slides),\n ...(writeHeroField ? { hero_content: slides } : {}),\n },\n token,\n );\n } catch (e) {\n console.error('Error saving custom page content:', e);\n }\n };\n\n const queued = saveQueueRef.current.then(run, run);\n saveQueueRef.current = queued;\n return queued;\n },\n [props.pageId, token],\n );\n\n const replaceSelectedConfig = useCallback((value: any) => {\n const next = typeof value === 'function' ? value(selectedConfigRef.current) : value;\n const normalized = Array.isArray(next) ? next : [];\n selectedConfigRef.current = normalized;\n setSelectedConfig(normalized);\n }, []);\n\n const addConfig = useCallback(\n (config: any) => {\n const next = [...selectedConfigRef.current, config];\n selectedConfigRef.current = next;\n setSelectedConfig(next);\n void persistLatest();\n },\n [persistLatest],\n );\n\n const updateConfig = useCallback(\n (config: any, index: number) => {\n const next = [...selectedConfigRef.current];\n next[index] = config;\n selectedConfigRef.current = next;\n setSelectedConfig(next);\n void persistLatest();\n },\n [persistLatest],\n );\n\n const moveConfig = useCallback(\n (fromIndex: number, toIndex: number) => {\n const next = [...selectedConfigRef.current];\n const [moved] = next.splice(fromIndex, 1);\n next.splice(toIndex, 0, moved);\n selectedConfigRef.current = next;\n setSelectedConfig(next);\n void persistLatest();\n },\n [persistLatest],\n );\n\n const removeConfig = useCallback(\n (index: number) => {\n const next = selectedConfigRef.current.filter((_, i) => i !== index);\n selectedConfigRef.current = next;\n setSelectedConfig(next);\n void persistLatest();\n },\n [persistLatest],\n );\n\n const onUpdateHeroSlider = useCallback(\n async (slidesToSave: any[]) => {\n const slides = Array.isArray(slidesToSave) ? slidesToSave : [];\n heroSlidesRef.current = slides;\n setHeroSliderConfigData(slides);\n await persistLatest(true);\n },\n [persistLatest],\n );\n\n useEffect(() => {\n load();\n }, [load]);\n\n return (\n <CustomPageConfigContext.Provider\n value={{\n selectedConfig,\n setSelectedConfig: replaceSelectedConfig,\n addConfig,\n updateConfig,\n removeConfig,\n moveConfig,\n heroSliderConfigData,\n onUpdateHeroSlider,\n loading,\n }}\n >\n <HomeConfigHeroSliderContext.Provider\n value={{ loading, heroSliderConfigData, onUpdateHeroSlider }}\n >\n {props.children}\n </HomeConfigHeroSliderContext.Provider>\n </CustomPageConfigContext.Provider>\n );\n};\n\nexport const useCustomPageConfig = () => useContext(CustomPageConfigContext);\n","import React, { createContext, useContext, useEffect, useState } from 'react'\nimport { api } from '@growupsell/api';\nimport { useAuth } from './AuthProvider';\nimport { useToastSupport } from './ToastSupportProvider';\nimport { useCartWishlistRefresh } from './CartWishlistRefreshProvider';\nimport { useCart } from './CartProvider';\n\nexport const WishlistContext = createContext<{\n wishlistItems: any[];\n addToWishlist: (sku: any) => void;\n deleteWishlistItem: (id: number) => void;\n moveToCart: (sku: any, quantity: number) => void;\n fetchWishlistLoading: boolean;\n addToWishlistLoading: boolean;\n moveToCartLoading: boolean;\n}>({\n wishlistItems: [],\n addToWishlist: () => null,\n deleteWishlistItem: () => { },\n moveToCart: () => { },\n fetchWishlistLoading: false,\n addToWishlistLoading: false,\n moveToCartLoading: false,\n})\n\nexport const WishlistProvider = (props: React.PropsWithChildren) => {\n const toast = useToastSupport();\n\n const [wishlistItems, setWishlistItems] = useState<any>([]);\n const { user } = useAuth();\n const [fetchWishlistLoading, setFetchWishlistLoading] = useState(true);\n const [addToWishlistLoading, setAddToWishlistLoading] = useState(false);\n const [moveToCartLoading, setMoveToCartLoading] = useState(false);\n const { addToCart } = useCart();\n\n const { refreshType, setRefreshType } = useCartWishlistRefresh();\n\n useEffect(() => {\n if (refreshType == 'wishlist') {\n fetchWishlistDetail();\n setRefreshType(null);\n }\n }, [refreshType])\n\n const fetchWishlistDetail = async () => {\n if (!!user) {\n setFetchWishlistLoading(true);\n try {\n const response = await api.getWishlist();\n console.log('fetchWishlistDetail response:', response);\n setWishlistItems(response); // Update the state\n return response; // ✅ Ensure it returns data\n } catch (error) {\n console.error('Error fetching wishlist details:', error);\n return null;\n } finally {\n setFetchWishlistLoading(false);\n }\n }\n };\n\n useEffect(() => {\n user && user.is_active && fetchWishlistDetail();\n }, [user]);\n\n const addToWishlist = async (sku: any) => {\n try {\n setAddToWishlistLoading(true);\n let body = {\n sku: sku,\n };\n await api.addProductToWishlist(body);\n console.log('New item added to Wishlist');\n toast.success('Item added to wishlist');\n fetchWishlistDetail();\n\n } catch (error: any) {\n console.log('error==', error);\n\n const errorMessage = error?.response?.data?.message || error?.response?.message || 'Something went wrong! Please try again.';\n toast.error(errorMessage);\n } finally {\n setAddToWishlistLoading(false);\n }\n };\n\n const deleteWishlistItem = async (id: number) => {\n try {\n setFetchWishlistLoading(true);\n const response = await api.deleteWishlist(id); // Call the API to delete the item\n console.log('Item deleted:', response); // Logging response for debugging\n setWishlistItems((prevItems: any[]) => prevItems.filter(item => item.id !== id));\n toast.success('Item removed from wishlist');\n await fetchWishlistDetail();\n } catch (error) {\n console.log('Error deleting item:', error);\n toast.error('Failed to remove item from wishlist');\n } finally {\n setFetchWishlistLoading(false);\n }\n };\n\n const moveToCart = async (id: number, quantity: number) => {\n let isItemInWishlist = wishlistItems?.find((item: any) => item.id === id);\n\n if (!isItemInWishlist) {\n console.log('Item not found in wishlist.');\n toast.warning('Item not found in wishlist');\n return;\n }\n\n try {\n setMoveToCartLoading(true);\n // Use CartProvider's addToCart which handles updating quantity if item already exists\n addToCart(isItemInWishlist.sku.id, quantity);\n\n // Remove from wishlist after successfully adding to cart\n await api.deleteWishlist(isItemInWishlist.id);\n setWishlistItems(wishlistItems?.filter((item: any) => item.id !== isItemInWishlist.id));\n\n setRefreshType('cart');\n\n } catch (error: any) {\n console.log('Error moving item to cart:', error);\n const errorMessage = error?.response?.data?.message || error?.response?.message || error?.message || '';\n const errorMsg = errorMessage || 'Failed to move item to cart';\n toast.error(errorMsg);\n } finally {\n setMoveToCartLoading(false);\n }\n };\n\n return (\n <WishlistContext.Provider value={{ wishlistItems, addToWishlist, deleteWishlistItem, moveToCart, fetchWishlistLoading, addToWishlistLoading, moveToCartLoading }}>\n {props.children}\n </WishlistContext.Provider>\n )\n}\n\nexport const useWishlist = () => useContext(WishlistContext);\n","\nimport React, { createContext, useContext, useState, ReactNode } from \"react\";\n\ntype ModalType = \"\" | \"login\" | \"signup\" | \"forgot\" | \"otp\" | \"reset\";\n\ntype ModalUserData = {\n otp?: { id: string; value: string };\n reset?: string;\n};\n\ntype ModalContextType = {\n openModal: ModalType;\n showModal: (modal: ModalType) => void;\n closeModal: () => void;\n userData: ModalUserData;\n setUserData: (data: ModalUserData) => void;\n clearUserData: () => void;\n};\n\nconst ModalContext = createContext<ModalContextType | undefined>(undefined);\n\nexport const ModalProvider = ({ children }: { children: ReactNode }) => {\n const [openModal, setOpenModal] = useState<ModalType>(\"\");\n const [userData, setUserData] = useState<ModalUserData>({});\n\n const showModal = (modal: ModalType) => setOpenModal(modal);\n const closeModal = () => setOpenModal(\"\");\n const clearUserData = () => setUserData({});\n\n return (\n <ModalContext.Provider\n value={{\n openModal,\n showModal,\n closeModal,\n userData,\n setUserData,\n clearUserData,\n }}\n >\n {children}\n </ModalContext.Provider>\n );\n};\n\nexport const useModal = () => {\n const context = useContext(ModalContext);\n if (!context) {\n throw new Error(\"useModal must be used within a ModalProvider\");\n }\n return context;\n};\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { useThemeEdit } from \"./ThemeEditProvider\";\nimport { useBusiness } from \"./BusinessProvider\";\nimport { api } from \"@growupsell/api\";\n\nexport const HeaderFooterContext = createContext<{\n headerConfig: any;\n footerConfig: any;\n onUpdateThemeContent: (configToUpdate: any) => Promise<void>;\n loading: boolean;\n announcementConfig: any;\n}>({\n headerConfig: {},\n footerConfig: {},\n onUpdateThemeContent: () => Promise.resolve(),\n loading: false,\n announcementConfig: {},\n});\n\nexport const HeaderFooterProvider = (props: {\n page: string;\n children: React.ReactNode;\n /** Server-fetched theme content for SSR / first paint (crawlers). */\n initialThemeContent?: any;\n}) => {\n const hasInitial =\n props.initialThemeContent != null && \"data\" in props.initialThemeContent;\n const initialData = hasInitial ? (props.initialThemeContent.data ?? {}) : {};\n\n const [headerConfig, setHeaderConfig] = useState<any>(() =>\n props.page === \"header\" ? initialData : {},\n );\n const [footerConfig, setFooterConfig] = useState<any>(() =>\n props.page === \"footer\" ? initialData : {},\n );\n const [announcementConfig, setAnnouncementConfig] = useState<any>(() =>\n props.page === \"announcement\" ? initialData : {},\n );\n const { token } = useThemeEdit();\n const themeConfig: any = useBusiness();\n const [loading, setLoading] = useState(!hasInitial);\n\n const getThemeConfig = useCallback(async () => {\n if (hasInitial) {\n return;\n }\n setLoading(true);\n try {\n const response = await api.retrieveThemeContent(\n themeConfig.theme.id,\n props.page,\n );\n response.slug === \"header\" && setHeaderConfig(response.data);\n response.slug === \"footer\" && setFooterConfig(response.data);\n response.slug === \"announcement\" && setAnnouncementConfig(response.data);\n } catch (error) {\n console.error(\"Error fetching theme content:\", error);\n } finally {\n setLoading(false);\n }\n }, [themeConfig.theme.id, hasInitial, props.page]);\n\n const onUpdateThemeContent = useCallback(\n async (configToUpdate: any) => {\n try {\n const body = {\n data: configToUpdate,\n slug: props.page,\n platform: typeof window !== \"undefined\" ? \"website\" : \"app\",\n };\n\n await api.updateThemeContent(\n body,\n themeConfig.theme.id,\n props.page,\n token,\n );\n const updatedResponse = await api.retrieveThemeContent(\n themeConfig.theme.id,\n props.page,\n );\n updatedResponse.slug === \"header\" &&\n setHeaderConfig(updatedResponse.data);\n updatedResponse.slug === \"footer\" &&\n setFooterConfig(updatedResponse.data);\n updatedResponse.slug === \"announcement\" &&\n setAnnouncementConfig(updatedResponse.data);\n } catch (error) {\n console.error(\"Error updating theme content:\", error);\n } finally {\n setLoading(false);\n }\n },\n [props.page, themeConfig.theme.id, token],\n );\n\n useEffect(() => {\n getThemeConfig();\n }, [getThemeConfig]);\n\n return (\n <HeaderFooterContext.Provider\n value={{\n headerConfig,\n footerConfig,\n onUpdateThemeContent,\n loading,\n announcementConfig,\n }}\n >\n {loading ? null : props.children}\n </HeaderFooterContext.Provider>\n );\n};\n\nexport const useHeaderFooter = () => {\n return useContext(HeaderFooterContext);\n};\n","import React, { createContext, useContext, useState, useEffect, useRef } from 'react';\nimport { api } from '@growupsell/api';\n\nexport const MenuFilterContext = createContext<{\n menuList: any[];\n categoryList: any[];\n selectedCategoryId: number[];\n addCategoryFilterId: (id: number) => void;\n removeCategoryFilterId: (id: number) => void;\n menuLoading: boolean;\n categoryLoading: boolean;\n isInitialLoad: boolean;\n currentPage: number;\n totalPages: number;\n handlePageChange: (page: number) => void;\n setMenuList: (x: any) => void;\n selectedSortOption: string;\n setSelectedSortOption: (x: string) => void;\n selectedMinPrice: number | undefined;\n selectedMaxPrice: number | undefined;\n setSelectedMinPrice: (x: any) => void;\n setSelectedMaxPrice: (x: any) => void;\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n selectedFoodType: string;\n setSelectedFoodType: (type: string) => void;\n}>({\n menuList: [],\n categoryList: [],\n selectedCategoryId: [],\n addCategoryFilterId: () => null,\n removeCategoryFilterId: () => null,\n menuLoading: true,\n categoryLoading: true,\n isInitialLoad: true,\n currentPage: 1,\n totalPages: 1,\n handlePageChange: () => null,\n setMenuList: () => null,\n selectedSortOption: 'newest_first',\n setSelectedSortOption: () => null,\n selectedMinPrice: undefined,\n selectedMaxPrice: undefined,\n setSelectedMinPrice: () => null,\n setSelectedMaxPrice: () => null,\n searchQuery: '',\n setSearchQuery: () => null,\n selectedFoodType: '',\n setSelectedFoodType: () => null,\n});\n\nexport const MenuFilterProvider = (props: React.PropsWithChildren) => {\n const [menuList, setMenuList] = useState<any[]>([]);\n const [categoryList, setCategoryList] = useState<any[]>([]);\n const [selectedCategoryId, setSelectedCategoryId] = useState<number[]>([]);\n const [selectedSortOption, setSelectedSortOption] = useState<string>('newest_first');\n const [selectedMinPrice, setSelectedMinPrice] = useState<number | undefined>();\n const [selectedMaxPrice, setSelectedMaxPrice] = useState<number | undefined>();\n const [menuLoading, setMenuLoading] = useState(true);\n const [categoryLoading, setCategoryLoading] = useState(true);\n const [isInitialLoad, setIsInitialLoad] = useState(true);\n const [currentPage, setCurrentPage] = useState(1);\n const [searchQuery, setSearchQuery] = useState('');\n const [debouncedSearchQuery, setDebouncedSearchQuery] = useState('');\n const [selectedFoodType, setSelectedFoodType] = useState('');\n const limit = 12;\n const [totalCount, setTotalCount] = useState(0);\n const totalPages = Math.ceil(totalCount / limit);\n const searchTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Fetch menu categories\n const fetchCategoryList = async () => {\n setCategoryLoading(true);\n try {\n const response = await api.getMenuCategories();\n setCategoryList(response.data || response);\n } catch (error) {\n console.log('Error fetching categories:', error);\n } finally {\n setCategoryLoading(false);\n }\n };\n\n // Fetch menu list\n const fetchMenuList = async () => {\n setMenuLoading(true);\n try {\n let body: any = {\n limit: limit,\n offset: (currentPage - 1) * limit,\n };\n\n // Add category_ids if selected (as comma-separated string)\n if (selectedCategoryId.length > 0) {\n body.category_ids = selectedCategoryId.join(',');\n }\n\n // Add food_type if selected\n if (selectedFoodType) {\n body.food_type = selectedFoodType;\n }\n\n // Add search query if provided\n if (debouncedSearchQuery.trim()) {\n body.search = debouncedSearchQuery;\n }\n\n const response = await api.getMenuList(body);\n\n // Get menu data from response\n let filteredMenus = response.data || response;\n\n // If response is an object with results/data array, extract it\n if (filteredMenus && typeof filteredMenus === 'object' && !Array.isArray(filteredMenus)) {\n filteredMenus = filteredMenus.results || filteredMenus.data || filteredMenus.items || [];\n }\n\n // Ensure it's an array\n if (!Array.isArray(filteredMenus)) {\n filteredMenus = [];\n }\n\n setMenuList(filteredMenus);\n setTotalCount(filteredMenus.length);\n } catch (error) {\n console.log('Error fetching menus:', error);\n } finally {\n setMenuLoading(false);\n if (isInitialLoad) {\n setIsInitialLoad(false);\n }\n }\n };\n\n const addCategoryFilterId = (id: number) => {\n setSelectedCategoryId((prevIds) => {\n if (prevIds.includes(id)) {\n return prevIds;\n }\n return [...prevIds, id];\n });\n setCurrentPage(1);\n };\n\n const removeCategoryFilterId = (id: number) => {\n setSelectedCategoryId((x) => {\n return x.filter((o) => o !== id);\n });\n setCurrentPage(1);\n };\n\n const handlePageChange = (page: number) => {\n setCurrentPage(page);\n };\n\n // Debounce search query\n useEffect(() => {\n // Clear existing timeout\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n\n // Set new timeout\n searchTimeoutRef.current = setTimeout(() => {\n setDebouncedSearchQuery(searchQuery);\n }, 1000);\n\n // Cleanup function\n return () => {\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n };\n }, [searchQuery]);\n\n // Fetch categories on mount\n useEffect(() => {\n fetchCategoryList();\n }, []);\n\n // Fetch menus when filters change\n useEffect(() => {\n fetchMenuList();\n }, [\n selectedCategoryId,\n currentPage,\n selectedSortOption,\n selectedMinPrice,\n selectedMaxPrice,\n debouncedSearchQuery,\n selectedFoodType,\n ]);\n\n return (\n <MenuFilterContext.Provider\n value={{\n menuList,\n categoryList,\n selectedCategoryId,\n addCategoryFilterId,\n removeCategoryFilterId,\n menuLoading,\n categoryLoading,\n isInitialLoad,\n currentPage,\n totalPages,\n handlePageChange,\n setMenuList,\n selectedSortOption,\n setSelectedSortOption,\n selectedMinPrice,\n selectedMaxPrice,\n setSelectedMinPrice,\n setSelectedMaxPrice,\n searchQuery,\n setSearchQuery,\n selectedFoodType,\n setSelectedFoodType,\n }}\n >\n {props.children}\n </MenuFilterContext.Provider>\n );\n};\n\nexport const useMenuFilter = () => useContext(MenuFilterContext);","import React, { createContext, useState, useEffect, useContext } from 'react';\nimport { api } from '@growupsell/api';\nimport { useStorage } from './StorageProvider';\nimport { useAuth } from './AuthProvider';\n\nexport const MenuCartContext = createContext<{\n menuCartItems: any[];\n cartLength: number;\n cartType: 'delivery' | 'pickup' | 'self_dinein';\n session: any;\n errorMessage?: string | null;\n menuCartLoading: boolean;\n promoCodeLoading: boolean;\n updateOrderType: (params: { type: 'delivery' | 'pickup' | 'self_dinein'; pickup_time?: string; table_no?: string | number; shipping_address?: number }) => void;\n addMenuToCart: (itemId: number, quantity: number, customizeOptions?: any[]) => Promise<void>;\n updateMenuCartItem: (id: number, quantity: number, customizeOptions?: any[]) => Promise<void>;\n deleteMenuCartItem: (id: number) => Promise<void>;\n updateMenuCartPromoCode: (promoCode: string | null) => Promise<void>;\n updateMenuCartAddress: (shippingAddress: number) => Promise<void>;\n getMenuOrderCharge: (orderId: number, body: object) => Promise<any>;\n clearMenuCart: () => void;\n}>({\n menuCartItems: [],\n cartLength: 0,\n cartType: 'delivery',\n session: null,\n errorMessage: null,\n menuCartLoading: false,\n promoCodeLoading: false,\n updateOrderType: () => { },\n addMenuToCart: async () => { },\n updateMenuCartItem: async () => { },\n deleteMenuCartItem: async () => { },\n updateMenuCartPromoCode: async () => { },\n updateMenuCartAddress: async () => { },\n getMenuOrderCharge: async () => { },\n clearMenuCart: () => { },\n});\n\nexport const MenuCartProvider = (props: React.PropsWithChildren) => {\n const [menuCartItems, setMenuCartItems] = useState<any[]>([]);\n const [cartLength, setCartLength] = useState<number>(0);\n const [cartType, setCartTypeState] = useState<'delivery' | 'pickup' | 'self_dinein'>('delivery');\n const [session, setSession] = useState<any>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [menuCartLoading, setMenuCartLoading] = useState<boolean>(false);\n const [promoCodeLoading, setPromoCodeLoading] = useState<boolean>(false);\n const { user } = useAuth();\n\n const storage = useStorage();\n\n const fetchMenuCartDetail = async () => {\n setMenuCartLoading(true);\n try {\n const response = await api.getMenuCartDetail();\n setMenuCartItems(response?.items || response?.products || []);\n setCartLength(response?.items?.length || response?.products?.length || 0);\n setCartTypeState(response?.type || 'delivery');\n setSession(response);\n } catch (error) {\n console.error('Error fetching menu cart:', error);\n setMenuCartItems([]);\n setCartLength(0);\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n useEffect(() => {\n fetchMenuCartDetail();\n }, [user]);\n\n // Update cartLength whenever menuCartItems changes\n useEffect(() => {\n setCartLength(menuCartItems.length);\n }, [menuCartItems]);\n\n // Save session to localStorage whenever session changes\n useEffect(() => {\n session && storage.setItem('menuCart', JSON.stringify(session), 'local');\n }, [session, storage]);\n\n // This function handles both local state and API call\n const updateOrderType = async (params: { type: 'delivery' | 'pickup' | 'self_dinein'; pickup_time?: string; table_no?: string | number; shipping_address?: number }) => {\n setMenuCartLoading(true);\n try {\n const { type, pickup_time, table_no, shipping_address } = params;\n const body: any = { type };\n\n if (type === 'pickup' && pickup_time) {\n body.pickup_time = pickup_time;\n }\n\n if (type === 'self_dinein' && table_no) {\n body.table_no = table_no;\n }\n\n if (type === 'delivery' && user && shipping_address) {\n body.shipping_address = shipping_address;\n }\n\n await api.updateMenuCartType(body);\n setCartTypeState(type);\n fetchMenuCartDetail();\n } catch (error) {\n console.error('Failed to update cart type:', error);\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n // Function to update promo code\n const updateMenuCartPromoCode = async (promoCode: string | null) => {\n let body = {\n promo_code: promoCode,\n };\n setPromoCodeLoading(true);\n setErrorMessage(null);\n try {\n if (session) {\n const response = await api.updateMenuCartPromoCode(body);\n setSession({\n ...session,\n promo: response.promo,\n promo_redeem_amount: Number(response.promo_redeem_amount),\n final_payable_amount: Number(response.final_payable_amount),\n });\n // Refresh cart data after updating promo code\n await fetchMenuCartDetail();\n }\n } catch (error: any) {\n setErrorMessage(error?.response?.data?.error || error?.message || 'Failed to apply promo code');\n console.error('Failed to update promo code:', error);\n } finally {\n setPromoCodeLoading(false);\n }\n };\n\n // Function to update menu cart address\n const updateMenuCartAddress = async (shippingAddress: number) => {\n setMenuCartLoading(true);\n setErrorMessage(null);\n try {\n const body = {\n shipping_address: shippingAddress\n };\n\n const response = await api.updateMenuOrderCartAddress(body);\n setSession({\n ...session,\n shipping_address: response.shipping_address,\n });\n // Refresh cart data after updating address\n await fetchMenuCartDetail();\n } catch (error: any) {\n setErrorMessage(error?.response?.data?.error || error?.message || 'Failed to update address');\n console.error('Failed to update menu cart address:', error);\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n // Function to get menu order charge\n const getMenuOrderCharge = async (orderId: number, body: object) => {\n setMenuCartLoading(true);\n setErrorMessage(null);\n try {\n const response = await api.getMenuOrderCharge(orderId, body);\n return response;\n } catch (error: any) {\n setErrorMessage(error?.response?.data?.error || error?.message || 'Failed to get order charge');\n console.error('Failed to get menu order charge:', error);\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n // Function to add menu item to cart\n const addMenuToCart = async (itemId: number, quantity: number, customizeOptions?: any[]) => {\n setMenuCartLoading(true);\n try {\n const body = {\n item: itemId,\n qty: quantity,\n customize_option: customizeOptions || []\n };\n\n await api.addMenuToCart(body);\n // Refresh cart data after adding item\n await fetchMenuCartDetail();\n } catch (error) {\n console.error('Failed to add menu item to cart:', error);\n throw error;\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n // Function to update menu cart item\n const updateMenuCartItem = async (id: number, quantity: number, customizeOptions?: any[]) => {\n setMenuCartLoading(true);\n try {\n const body = {\n qty: quantity,\n customize_option: customizeOptions || []\n };\n\n await api.updateMenuCartItem(id, body);\n // Refresh cart data after updating item\n await fetchMenuCartDetail();\n } catch (error) {\n console.error('Failed to update menu cart item:', error);\n throw error;\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n // Function to delete menu cart item\n const deleteMenuCartItem = async (id: number) => {\n setMenuCartLoading(true);\n try {\n await api.deleteMenuCartItem(id);\n // Refresh cart data after deleting item\n await fetchMenuCartDetail();\n } catch (error) {\n console.error('Failed to delete menu cart item:', error);\n throw error;\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n const clearMenuCart = () => {\n setMenuCartItems([]);\n setSession(null);\n storage.removeItem('menuCart');\n fetchMenuCartDetail();\n };\n\n return (\n <MenuCartContext.Provider\n value={{\n menuCartItems,\n cartLength,\n cartType,\n session,\n errorMessage,\n menuCartLoading,\n promoCodeLoading,\n updateOrderType,\n addMenuToCart,\n updateMenuCartItem,\n deleteMenuCartItem,\n updateMenuCartPromoCode,\n updateMenuCartAddress,\n getMenuOrderCharge,\n clearMenuCart,\n }}\n >\n {props.children}\n </MenuCartContext.Provider>\n );\n};\n\nexport const useMenuCart = () => useContext(MenuCartContext);\n","import React, { createContext, useContext, useEffect, useState } from 'react';\n\nconst REFERRAL_STORAGE_KEY = 'referralCode';\n\nconst ReferralCodeContext = createContext<string | null>(null);\n\nexport function ReferralCodeProvider({\n children,\n referralCodeFromUrl,\n}: {\n children: React.ReactNode;\n referralCodeFromUrl: string | null;\n}) {\n const [referralCode, setReferralCode] = useState<string | null>(null);\n\n useEffect(() => {\n if (referralCodeFromUrl) {\n if (typeof window !== 'undefined') {\n sessionStorage.setItem(REFERRAL_STORAGE_KEY, referralCodeFromUrl);\n }\n setReferralCode(referralCodeFromUrl);\n } else if (typeof window !== 'undefined') {\n setReferralCode(sessionStorage.getItem(REFERRAL_STORAGE_KEY));\n }\n }, [referralCodeFromUrl]);\n\n return (\n <ReferralCodeContext.Provider value={referralCode}>\n {children}\n </ReferralCodeContext.Provider>\n );\n}\n\nexport function useReferralCode() {\n return useContext(ReferralCodeContext);\n}\n","import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { api } from '@growupsell/api';\nimport type { LiveSupportWidgetConfig } from '@growupsell/api/api';\n\nexport type { LiveSupportWidgetConfig };\n\ntype LiveSupportWidgetContextValue = {\n config: LiveSupportWidgetConfig | null;\n loading: boolean;\n};\n\nconst LiveSupportWidgetContext = createContext<LiveSupportWidgetContextValue>({\n config: null,\n loading: true,\n});\n\ntype Props = {\n children: React.ReactNode;\n};\n\nexport const LiveSupportWidgetProvider: React.FC<Props> = ({ children }) => {\n const [config, setConfig] = useState<LiveSupportWidgetConfig | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let isMounted = true;\n\n (async () => {\n try {\n const data = await api.getLiveSupportWidgetConfig();\n if (isMounted) {\n setConfig(data);\n }\n } catch (e) {\n if (isMounted) {\n setConfig(null);\n }\n } finally {\n if (isMounted) {\n setLoading(false);\n }\n }\n })();\n\n return () => {\n isMounted = false;\n };\n }, []);\n\n return (\n <LiveSupportWidgetContext.Provider value={{ config, loading }}>\n {children}\n </LiveSupportWidgetContext.Provider>\n );\n};\n\nexport const useLiveSupportWidget = () => useContext(LiveSupportWidgetContext);\n\n","import React from 'react';\nimport {\n BusinessConfigProvider,\n BusinessMediaProvider,\n AuthProvider,\n ModalProvider,\n CartProvider,\n FilterProvider,\n ProductConfigProvider,\n StorageProvider,\n CustomerConfigProvider,\n WishlistProvider,\n CartWishlistRefreshProvider,\n ThemeEditProvider,\n MenuFilterProvider,\n MenuCartProvider,\n ReferralCodeProvider,\n LiveSupportWidgetProvider,\n} from '../provider';\nimport { ToastSupportProvider, type ToastSupportApi } from './ToastSupportProvider';\n\ninterface BaseProviderProps {\n children: React.ReactNode;\n baseURL: any;\n token?: string;\n isEdit?: boolean;\n businessConfig: any;\n storage: {\n setItem: (key: string, value: string, type?: string) => void;\n getItem: (key: string, type?: string) => string | null;\n clearAll: () => void;\n removeItem: (key: string, type?: string) => void;\n };\n isHeader?: boolean;\n isFooter?: boolean;\n isAnnouncementBar?: boolean;\n /** Referral code from URL (e.g. ?referralCode=xxx). Persisted and passed to register API. */\n referralCodeFromUrl?: string | null;\n /**\n * Web: pass your host app’s toast API (e.g. Next.js `utils/toast` wrapping react-toastify) so Cart/Wishlist can notify.\n * React Native: pass your own implementation or omit (no-ops).\n */\n toast?: ToastSupportApi;\n}\n\nexport const BaseProvider: React.FC<BaseProviderProps> = ({\n children,\n baseURL,\n token,\n isEdit,\n businessConfig,\n storage,\n isHeader,\n isFooter,\n isAnnouncementBar,\n referralCodeFromUrl = null,\n toast,\n}) => {\n return (\n <StorageProvider storage={storage}>\n <ToastSupportProvider value={toast}>\n <BusinessConfigProvider data={businessConfig} baseURL={baseURL}>\n <ReferralCodeProvider referralCodeFromUrl={referralCodeFromUrl}>\n <ThemeEditProvider isThemeEdit={isEdit!} token={token!} isHeader={isHeader!} isFooter={isFooter!} isAnnouncementBar={isAnnouncementBar!}>\n <BusinessMediaProvider>\n <CustomerConfigProvider>\n <AuthProvider>\n <ModalProvider>\n <LiveSupportWidgetProvider>\n {businessConfig.category.type == 'retail' ?\n <ProductConfigProvider>\n <CartWishlistRefreshProvider>\n <CartProvider>\n <WishlistProvider>\n <FilterProvider>\n <>{children}</>\n </FilterProvider>\n </WishlistProvider>\n </CartProvider>\n </CartWishlistRefreshProvider>\n </ProductConfigProvider>\n :\n <MenuCartProvider>\n <MenuFilterProvider>\n <>{children}</>\n </MenuFilterProvider>\n </MenuCartProvider>}\n {/* <ProductConfigProvider>\n <CartWishlistRefreshProvider>\n <CartProvider>\n <WishlistProvider>\n <FilterProvider>\n <MenuFilterProvider>\n <>{children}</>\n </MenuFilterProvider>\n </FilterProvider>\n </WishlistProvider>\n </CartProvider>\n </CartWishlistRefreshProvider>\n </ProductConfigProvider> */}\n </LiveSupportWidgetProvider>\n </ModalProvider>\n </AuthProvider>\n </CustomerConfigProvider>\n </BusinessMediaProvider>\n </ThemeEditProvider>\n </ReferralCodeProvider>\n </BusinessConfigProvider>\n </ToastSupportProvider>\n </StorageProvider>\n );\n};\n"]}
package/dist/index.cjs CHANGED
@@ -953,6 +953,8 @@ var HomeConfigProvider = (props) => {
953
953
  const getThemeConfig = react.useCallback(async () => {
954
954
  if (!hasInitial) {
955
955
  setLoading(true);
956
+ } else {
957
+ return;
956
958
  }
957
959
  try {
958
960
  const response = await api$1.retrieveThemeContent(
@@ -969,7 +971,7 @@ var HomeConfigProvider = (props) => {
969
971
  }
970
972
  setIsInitialized(true);
971
973
  } catch (error) {
972
- console.error("Error fetching theme content:", error);
974
+ console.log("Error fetching theme content:", error);
973
975
  } finally {
974
976
  setLoading(false);
975
977
  }
@@ -1073,11 +1075,17 @@ var HomeConfigHeroSliderContext = react.createContext({
1073
1075
  onUpdateHeroSlider: () => null
1074
1076
  });
1075
1077
  var HomeConfigHeroSliderProvider = (props) => {
1076
- const [loading, setLoading] = react.useState(true);
1077
- const [heroSliderConfigData, setHeroSliderConfigData] = react.useState([]);
1078
+ const hasInitial = Array.isArray(props.initialThemeContent?.data);
1079
+ const [loading, setLoading] = react.useState(!hasInitial);
1080
+ const [heroSliderConfigData, setHeroSliderConfigData] = react.useState(
1081
+ () => hasInitial ? props.initialThemeContent.data : []
1082
+ );
1078
1083
  const { token } = useThemeEdit();
1079
1084
  const themeConfig = react.useContext(BusinessConfigContext);
1080
- const getHeroSliderConfig = async () => {
1085
+ const getHeroSliderConfig = react.useCallback(async () => {
1086
+ if (hasInitial) {
1087
+ return;
1088
+ }
1081
1089
  setLoading(true);
1082
1090
  try {
1083
1091
  const response = await api$1.retrieveThemeContent(
@@ -1085,13 +1093,15 @@ var HomeConfigHeroSliderProvider = (props) => {
1085
1093
  "hero_slider"
1086
1094
  );
1087
1095
  setHeroSliderConfigData(response.data);
1096
+ } catch (error) {
1097
+ console.error("Error fetching hero slider content:", error);
1088
1098
  } finally {
1089
1099
  setLoading(false);
1090
1100
  }
1091
- };
1101
+ }, [themeConfig.theme.id, hasInitial]);
1092
1102
  react.useEffect(() => {
1093
1103
  getHeroSliderConfig();
1094
- }, []);
1104
+ }, [getHeroSliderConfig]);
1095
1105
  const onUpdateHeroSlider = async (configToUpdate) => {
1096
1106
  setLoading(true);
1097
1107
  try {
@@ -1422,13 +1432,24 @@ var HeaderFooterContext = react.createContext({
1422
1432
  announcementConfig: {}
1423
1433
  });
1424
1434
  var HeaderFooterProvider = (props) => {
1425
- const [headerConfig, setHeaderConfig] = react.useState({});
1426
- const [footerConfig, setFooterConfig] = react.useState({});
1427
- const [announcementConfig, setAnnouncementConfig] = react.useState({});
1435
+ const hasInitial = props.initialThemeContent != null && "data" in props.initialThemeContent;
1436
+ const initialData = hasInitial ? props.initialThemeContent.data ?? {} : {};
1437
+ const [headerConfig, setHeaderConfig] = react.useState(
1438
+ () => props.page === "header" ? initialData : {}
1439
+ );
1440
+ const [footerConfig, setFooterConfig] = react.useState(
1441
+ () => props.page === "footer" ? initialData : {}
1442
+ );
1443
+ const [announcementConfig, setAnnouncementConfig] = react.useState(
1444
+ () => props.page === "announcement" ? initialData : {}
1445
+ );
1428
1446
  const { token } = useThemeEdit();
1429
1447
  const themeConfig = useBusiness();
1430
- const [loading, setLoading] = react.useState(true);
1448
+ const [loading, setLoading] = react.useState(!hasInitial);
1431
1449
  const getThemeConfig = react.useCallback(async () => {
1450
+ if (hasInitial) {
1451
+ return;
1452
+ }
1432
1453
  setLoading(true);
1433
1454
  try {
1434
1455
  const response = await api.api.retrieveThemeContent(
@@ -1443,7 +1464,7 @@ var HeaderFooterProvider = (props) => {
1443
1464
  } finally {
1444
1465
  setLoading(false);
1445
1466
  }
1446
- }, [themeConfig.theme.id]);
1467
+ }, [themeConfig.theme.id, hasInitial, props.page]);
1447
1468
  const onUpdateThemeContent = react.useCallback(
1448
1469
  async (configToUpdate) => {
1449
1470
  try {
@@ -1471,7 +1492,7 @@ var HeaderFooterProvider = (props) => {
1471
1492
  setLoading(false);
1472
1493
  }
1473
1494
  },
1474
- [props.page]
1495
+ [props.page, themeConfig.theme.id, token]
1475
1496
  );
1476
1497
  react.useEffect(() => {
1477
1498
  getThemeConfig();
@@ -1479,7 +1500,13 @@ var HeaderFooterProvider = (props) => {
1479
1500
  return /* @__PURE__ */ jsxRuntime.jsx(
1480
1501
  HeaderFooterContext.Provider,
1481
1502
  {
1482
- value: { headerConfig, footerConfig, onUpdateThemeContent, loading, announcementConfig },
1503
+ value: {
1504
+ headerConfig,
1505
+ footerConfig,
1506
+ onUpdateThemeContent,
1507
+ loading,
1508
+ announcementConfig
1509
+ },
1483
1510
  children: loading ? null : props.children
1484
1511
  }
1485
1512
  );